這篇文章要分享一個被命名為 Rogue Agent 的安全漏洞,這個漏洞出現在 Google 的 Dialogflow CX 服務中。雖然 Google 已經修復此問題,但它揭示了一個非常重要的工程實務觀點:在 AI Agent 的開發環境中,如果你能編輯 Agent 的邏輯,你實際上可能擁有了執行程式碼的最高權限。
首先我們得理解 Dialogflow CX 的 Code Blocks 功能。這是一個讓開發者在對話流程中插入自定義 Python 程式碼的機制,用來處理複雜的輸入驗證、控制對話行為或呼叫外部工具。對於 Junior 工程師來說,你可以把它想像成一種 Serverless Function,讓 AI 在對話到特定步驟時,能跑一段真實的程式碼來處理邏輯。
漏洞的核心在於 Google 如何執行這些 Python 程式碼。
在該漏洞發生前,同一個 Google Cloud 專案中所有啟用 Code Blocks 的 Agent,實際上是共享同一個由 Google 管理的 Cloud Run 執行環境。當一個 Code Block 被觸發時,系統會將開發者寫的 Python 程式碼附加到一段內部的設定程式碼之後,然後使用 Python 的 exec() 函數來執行。
問題就在這裡:負責封裝執行環境的關鍵檔案 code_execution_env.py 在該共享環境中竟然是可寫入的。
這意味著如果一名攻擊者擁有其中一個 Agent 的編輯權限(具備 dialogflow.playbooks.update 權限),他不需要攻擊整個 Google 雲端,只需要在自己的 Agent 中寫一段惡意的 Python 程式碼,去下載並覆蓋掉這個共享環境中的 code_execution_env.py 檔案。
一旦這個檔案被篡改,影響範圍會立即擴散到同一個專案下的所有其他 Agent。因為所有 Agent 執行 Code Block 時都會經過這個被污染的檔案,攻擊者就可以在後台靜默地讀取所有使用者的對話歷史、竊取敏感資料,甚至操控 Bot 發送釣魚訊息,例如要求使用者重新輸入密碼。
更糟糕的是,這種攻擊具有極強的隱蔽性。攻擊者在完成覆蓋後,可以將 Dialogflow 控制台上的程式碼還原成正常的樣子。由於覆蓋發生在 Google 管理的容器內部,而客戶端無法看到容器內部的檔案系統,且 Cloud Logging 並沒有記錄檔案變更,導致管理員幾乎無法從日誌中發現異常。
除了檔案覆蓋,研究人員還發現了兩個沙箱逃逸(Sandbox Escape)的風險:
第一是無限制的出站網路存取。Code Block 環境可以直接透過 urllib 存取外部網路,這繞過了 VPC Service Controls(Google Cloud 用來防止資料外洩的網路邊界控制),讓資料能被直接傳送到攻擊者的伺服器。
第二是暴露了 IMDS(Instance Metadata Service)。這是雲端環境中用來獲取實例元數據的內部端點。雖然這次獲取的服務帳號權限較低,但從安全設計原則來看,一個執行不可信程式碼的沙箱絕對不應該能接觸到 IMDS。
這個案例給我們的啟示是,在 AI Agent 的權限管理上,不能將編輯權限簡單視為內容修改。
在許多傳統系統中,修改對話腳本只是修改文字;但在支援 Code Blocks 的系統中,編輯權限實際上就是運行時控制權(Runtime Control)。如果你允許某人編輯 Agent,你實際上是允許他在你的共享執行環境中執行任意 Python 程式碼。
對於開發者和維運人員,建議採取以下防禦措施:
第一,嚴格審計 dialogflow.playbooks.update 權限的持有者,將其視為高風險權限而非單純的編輯權限。
第二,定期檢查 DATA_WRITE 審計日誌,尋找異常的 Playbook 更新紀錄,特別是來自不尋常 IP 或時間點的修改。
第三,在控制台中抽查所有 Agent 的 Code Block 內容,確保沒有未經授權的程式碼片段。
來源:thehackernews.com
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。