AI News HubLIVE
站內改寫3 分鐘閱讀

AutoJack:單一頁面即可讓 AI 代理宿主遭受遠端程式碼執行

一種名為 AutoJack 的新型漏洞鏈針對 AutoGen Studio,使 AI 代理渲染的惡意網頁能夠透過本地 MCP WebSocket 在宿主上實現遠端程式碼執行。該漏洞源於對本地主機來源的信任、缺失認證以及未經驗證的命令執行。微軟已在開發分支中修復此問題,且該漏洞從未出現在 PyPI 版本中。

來源Hacker News AI作者: p_stuart82

近期對 AI 代理框架安全性的持續研究發現,AutoGen Studio(微軟 AutoGen 的開源原型使用者介面)中存在一個漏洞鏈,允許由瀏覽型代理渲染的不可信網頁內容透過本地模型上下文協議(MCP)WebSocket 在宿主上執行任意命令。研究人員將這種技術命名為 AutoJack,其核心在於利用代理作為“迷糊代理”,跨越許多開發者工具所依賴的本地主機信任邊界。

研究人員已向微軟安全響應中心(MSRC)報告此行為,隨後維護者在主分支的提交 b047730 中加強了安全性。該問題在開發過程中被發現並解決。受影響的 MCP WebSocket 介面從未包含在 PyPI 釋出版本中,因此透過 PyPI 安裝 AutoGen Studio 的使用者不會暴露於該特定漏洞鏈。

更廣泛的教訓是:如果代理能夠瀏覽不受信任的頁面並與特權本地服務通訊,迴環地址可能成為攻擊面,控制平面必須經過認證、授權和隔離。

為何關注代理框架

現代 AI 代理不僅僅是文本生成器。它們讀取檔案、瀏覽頁面、呼叫 API 並執行工具。這正是其有用之處,也是研究人員投資於發現連線模型與工具的框架中系統性執行風險的原因。在本系列之前的研究中,研究人員已經覆蓋了微軟 Semantic Kernel 中的 RCE 原語。本文將向上移動一層,關注基礎設施和麵向開發者的原型表面,展示當原型在無防護措施執行時,相同的代理能力如何成為遠端程式碼執行的傳輸通道。

結論並非要避免使用原型,而是:當核心伺服器或筆記型電腦上的代理能夠瀏覽開放網路並同時與特權本地服務通訊時,localhost 就不再是信任邊界。防禦者需要為此做好規劃,而這些發現正是原因。

什麼是 AutoGen Studio

AutoGen Studio 是基於 AutoGen(微軟研究院的多代理系統框架)的使用者介面。它允許開發者組合代理、附加工具(包括 MCP 伺服器)並快速執行實驗。其文件明確說明了預期用途,即是一個研究原型,具有為便於迭代而非硬化部署而調整的預設值。

AutoJack 漏洞鏈概覽

以下說明僅用於演示目的。該漏洞鏈在當前版本中無法工作,此處包含是為了讓防禦者能在其他代理框架中識別出該模式。

漏洞鏈結合了 AutoGen Studio 的 MCP WebSocket 介面中的三個獨立弱點:

  1. 來源白名單信任本地主機——但本地代理本身就是本地主機(CWE-1385:WebSocket 中缺少來源驗證):MCP WebSocket 僅接受 Origin 為 http://127.0.0.1 或 http://localhost 的連線。這阻止了指向 evil.com 的瀏覽器,但無法阻止由同一機器上 AutoGen 代理擁有的無頭瀏覽器渲染的 JavaScript。
  1. 認證中介軟體對 MCP 路徑是可選加入(CWE-306:關鍵功能缺少認證):AutoGen Studio 中的認證中介軟體顯式跳過了 /api/mcp/*(和 /api/ws/*),假設這些路徑會自行檢查。但 MCP WebSocket 處理器並未實現後續檢查,導致無論應用其餘部分配置何種認證模式,MCP WebSocket 都會接受無認證的連線。
  1. 來自 URL 的 StdioServerParams 被直接執行(CWE-78:OS 命令中特殊元素未正確中和):端點接受 server_params 查詢引數,base64 解碼 JSON 物件為 StdioServerParams,並將命令和引數直接傳遞給 stdio_client(...)。沒有白名單——calc.exe、powershell.exe -enc ... 或 bash -c '...' 都被接受為“MCP 伺服器”。

將以上三點與由同一機器上的 AutoGen 代理渲染的開放網際網路網頁結合起來,就形成了遠端程式碼執行原語。無需使用者互動,只需代理渲染攻擊者的頁面。

圖 1 展示了端到端利用鏈:攻擊者頁面由本地瀏覽代理渲染;頁面開啟 WebSocket 連線至 ws://localhost:8081/api/mcp/ws/?server_params=;AutoGen Studio 解碼有效負載並在開發者賬戶下生成攻擊者提供的命令。

研究人員將這種技術命名為 AutoJack:攻擊者劫持瀏覽代理,將其用作“迷糊代理”,跨越本地主機邊界進入 AutoGen Studio 的 MCP 控制平面。

漏洞鏈解剖

問題 1:代理自身繞過的來源白名單

AutoGen Studio 的 MCP WebSocket 依賴傳統防禦來防止瀏覽器驅動的跨站 WebSocket 劫持(CSWSH):僅允許來自 127.0.0.1 / localhost 的同源連線。allowed_origins = [“http://127.0.0.1”, “http://localhost”]。對於開啟標籤頁訪問 evil[.]com 的人類使用者,這是正確的控制措施。瀏覽器會設定 Origin 頭為 hxxps://evil[.]com,檢查失敗,連線被拒絕。

但僅靠來源檢查對於代理來說並非正確的控制措施。裝備了內建網頁瀏覽工具(如 MultimodalWebSurfer、fetch_webpage_tool、任何基於 Playwright 的瀏覽工具或執行 requests/websockets 的程式碼執行工具)的 AutoGen 代理是工作站上的一個程序。它載入的任何內容都繼承了本地主機身份。該無頭瀏覽器執行的任何 JavaScript 的“來源”都是代理導航到的頁面——而它隨後發起的 WebSocket 呼叫攜帶的 Origin 滿足白名單。

圖 2 展示了透過代理繞過來源的過程:AutoJack——開發者工作站上的瀏覽代理被外部內容引導進入本地主機上的 AutoGen Studio MCP 控制平面,溶解了迴環信任邊界。

問題 2:認證中介軟體將 MCP 排除在外

AutoGen Studio 支援多種認證模式(無、github、msal、firebase)。所有模式都整合在單個 AuthMiddleware 中,該中介軟體在 FastAPI 路由排程之前執行。在 PyPI 版本中,該中介軟體包含對 WebSocket 型別路徑的提前返回:

if request.url.path.startswith("/api/ws") or request.url.path.startswith("/api/mcp"):
    return await call_next(request)

這意味著 MCP 路徑跳過認證,而 MCP WebSocket 處理器並未實現自己的檢查。