惡意Skill繞過Genie四道防線外洩資料

AI安全公司PromptArmor公開了一條針對Databricks Genie Code的攻擊鏈:一個帶有惡意程式碼的Skill,能在使用者毫無察覺的情況下,把租戶內的資料送到攻擊者的伺服器,順手在聊天介面彈出一個釣魚登入視窗。PromptArmor列出的四類官方安全控制,在這條攻擊鏈上一道都沒攔住。

Genie Code是Databricks內建的智能代理助手,使用者用自然語言請它查表、跑分析、畫圖表,結果會直接渲染在網頁聊天視窗裡。Skill則是一種可以上傳給代理的能力包,裡面有說明文字,也可以帶可執行程式碼。

攻擊怎麼走

PromptArmor示範的流程只有四步。使用者上傳一個看起來正常的資料分析Skill,請Genie用它分析某個資料集;Genie執行Skill裡的程式碼,負責把關的護欄代理沒能識別出惡意功能;Genie接著提示使用者「開啟完整分析結果」;結果一渲染,釣魚視窗隨即出現,資料同時被送走。

外洩的手法相當樸素。Skill程式碼先讀取受害者租戶內的敏感資料,把它塞進一段要在聊天中顯示的HTML;HTML裡的JavaScript在使用者的瀏覽器裡發出網路請求,把資料送到攻擊者的伺服器。釣魚視窗也是同一段HTML渲染出來的,疊在Genie頁面上,誘導使用者輸入帳號密碼。整個過程裡沒有任何一步需要人工審核。

四道控制為什麼都沒用

  • 組織層級的Skill治理:Genie會從使用者個人工作區載入Skill,並不只認組織統一管理的目錄,管理員管不到使用者自己上傳的那一份;
  • 護欄代理:Databricks自己把它定位為「盡力而為的效率功能」,不承諾當安全邊界使用;
  • 程式碼執行環境的出口控制:限制的是程式碼執行環境的出站流量,資料卻是從使用者瀏覽器發出去的,這層規則看不到;
  • 聊天顯示沙箱:Skill用的是已經拿到手的資料來拼顯示內容,不需要在顯示環節再查一次租戶資料。

四條各有各的道理,拼在一起卻留出了一條縫。PromptArmor在8月16日向Databricks報告了問題,雙方協調了約一個月,9月16日PromptArmor通知對方準備公開。

Databricks在回覆裡的態度相當明確:

"it is ultimately the user's responsibility to ensure that uploaded skills do not contain malicious content"

(確保上傳的Skill不含惡意內容,終究是使用者的責任。)

關於可以跳過逐次確認的自動核准功能,Databricks也表示它「不打算作為安全邊界」,文件裡寫的是不建議用於生產環境。

同一類縫,別家也有

把PromptArmor過去一年公開的幾份報告放在一起看,攻擊面高度相似。它先前披露過Claude Cowork外洩檔案、Google Antigravity外洩資料,路數都是讓代理讀到敏感內容,再靠渲染、連結或網路呼叫把內容帶出去。差別在於入口:前幾起多靠提示詞注入,這次則換成Skill這種「裝上就能跑程式碼」的外掛。

對企業來說,Skill比一段注入文字更難防。注入文字至少要藏在網頁或文件裡,等著代理讀到;Skill則是使用者主動裝進來的,天生帶著信任。學術界今年也在密集討論這件事,arXiv上已經出現專門評測惡意Skill的基準,偵測工具的漏報率普遍不低。

中國大陸不少團隊也在替資料平台接上代理、開放外掛市集,這起事件給出的檢查清單相當具體:Skill是否只能從管理員審核過的目錄載入,代理輸出的HTML能不能執行腳本、能不能向外部網域發請求,自動核准開關在生產環境是否預設關閉。三條裡只要有一條沒卡住,PromptArmor示範的攻擊鏈就有機會重演。

PromptArmor給出的建議也落在這幾點上:生產資料別開自動核准,留意Skill市集裡被下毒的套件。Databricks是否會在產品層面補上一道出站過濾,目前沒有公開說明。

參考來源:PromptArmor安全研究報告、Databricks Genie Code產品文件、CocoLoop、arXiv惡意Skill相關論文;揭露與協調節點、Databricks回覆原文以PromptArmor報告為準。