部落格 發布於 AIA: 2026年7月6日

AutoJack:網頁如何連入本機 agent 控制面並執行程式碼

Microsoft 的 AutoJack 研究展示一條讓不可信網頁觸發主機上程式碼執行的完整路徑:瀏覽器 agent 先載入攻擊者頁面,頁面 JavaScript 再從同一台機器連線到 AutoGen Studio(Microsoft AutoGen 的本機 agent 建構與管理介面)的本機 MCP WebSocket,利用未套用驗證的路由傳入 server_params,最後讓 AutoGen Studio 依參數啟動攻擊者指定的程序。這個問題已在相關程式碼發布至 PyPI 前修補,但架構教訓更廣:只要 agent 能瀏覽外部內容,又能連到本機控制面,localhost 就不能被當成可信邊界。

Remote Code ExecutionPermission BypassRuntime IsolationMCP SecurityAgentic AI
8 項對應的 AIDEFEND 防禦手法
來源: AutoJack: Single Page RCE Host Running AI Agent 
作者: Microsoft Defender Security Research Team
原文發布: 2026年6月18日

威脅分析

  • 攻擊入口是一個被 agent 瀏覽的不可信網頁。 使用者或應用程式只要請瀏覽器 agent 摘要某個網址,agent 就可能用 headless browser 載入攻擊者控制的頁面;頁面內容本身不需要像傳統 exploit 一樣攻破瀏覽器。
  • 頁面 JavaScript 會從本機連到 AutoGen Studio。 因為瀏覽器 agent 和 AutoGen Studio 跑在同一台主機上,頁面開出的 WebSocket 連線可以碰到 ws://localhost:8081/api/mcp/...。原本用來限制外部網站的 Origin 檢查,遇到本機 agent 代為瀏覽時就不足以代表真實信任來源。
  • MCP WebSocket 路由沒有完成身分驗證。 Microsoft 描述的驗證中介層略過 /api/mcp/* 這類 WebSocket 路徑,假設後面的 handler 會自行檢查;但受影響的 MCP handler 沒有補上這道檢查,讓請求不用 token 就能進入控制面。
  • server_params 會被解碼成可啟動程序的參數。 WebSocket URL 裡的參數被 Base64 解碼後,會變成 StdioServerParams,再交給 MCP stdio client 啟動程序。若沒有允許清單,這不只是在啟動 MCP server,也可能啟動 calc.exe、PowerShell、bash 或其他攻擊者指定命令。
  • 影響是主機上的任意程序執行。 成功時,程式不是由遠端伺服器執行,而是在執行 AutoGen Studio 的開發者主機上、以該程序的權限啟動。攻擊者因此可能取得本機檔案、開發工具、環境變數、憑證與內網連線能力。
  • 防守重點是把瀏覽、控制面和程序啟動拆開。 不可信網頁不應能直接碰到本機 MCP 控制面;MCP 路由必須驗證身分與來源;可啟動的命令必須使用允許清單;即使命令真的被啟動,也應在低權限帳號、容器或一次性沙箱中執行。

適用的 8 項 AIDEFEND 防禦手法

AID-H-034.001
MCP Server Deployment Profile, Transport & Exposure Baseline
極高
MCP 部署基準直接對應這條鏈的控制面缺口:即使路由只綁在 localhost,也要檢查請求來源、驗證呼叫者身分、限制可沿用的環境權限,並把 MCP server 啟動流程放進安全設定較嚴格的執行環境。
AID-H-021.004
Control-Plane & Oversight-Surface Isolation
極高
控制面與監督介面隔離,可以避免瀏覽器 agent 載入的不可信頁面碰到會管理 MCP、工具和程序啟動的本機控制面。這會把「瀏覽外部網址」和「改變本機 agent 執行設定」拆成兩個不同邊界。
AID-H-034.003
Server-Side Tool Invocation Validation & Object-Level Authorization
極高
伺服器端工具驗證應在 MCP handler 接到 server_params 時執行:先確認呼叫者有權建立 MCP session,再檢查 command、args 和 env 是否符合允許清單,預設拒絕 shell、PowerShell、bash 或任意程序啟動。
AID-H-019.003
Browser Runtime Admission & Sanitized Observation Export Gate
極高
真正關鍵的是把瀏覽器放在由外部政策強制管控的執行邊界中,而不是只清理瀏覽器儲存空間。瀏覽器 agent 應在 Chromium 或 Playwright 無法自行修改的對外連線政策後方執行,明確拒絕 loopback 與私有位址,而且沙箱內不能暴露主機的控制面 socket。這樣攻擊者頁面既無法開啟 AutoGen Studio 的 localhost MCP WebSocket,也碰不到會啟動命令的路徑。
AID-H-003.010
Deployed AI Software Vulnerability Remediation Lifecycle
若組織部署了受影響的 AutoGen Studio 原始碼版本,修補 owner 必須先辨識實際運行的脆弱版本,重建或替換成已修正路由的版本,分階段 rollout,並確認沒有任何受影響執行個體遺留。這項控制負責軟體修補;另一項 closure 控制才負責獨立重播攻擊路徑。
AID-H-025.001
Pre-Execution Static Analysis & Dangerous Construct Blocking
危險程式結構偵測可以在 server_params 被解碼後、真正交給 stdio client 前攔截高風險內容,例如 shell 執行、Base64 包裝命令、程序建立、檔案系統操作或瀏覽器自動化指令。
AID-I-001.003
Ephemeral Single-Use Sandboxes for Tools
把高風險命令和 MCP server 啟動流程放進一次性沙箱,可以限制命令真的被啟動後能讀到的檔案、secrets、網路與開發者工具,避免 RCE 直接變成開發者主機接管。
AID-E-004
Incident Exploit-Path Closure Verification
修正版 AutoGen Studio 與控制變更部署完成後,應由獨立驗證方重播「攻擊者頁面連到 localhost WebSocket」的原始路徑,確認身分驗證、Origin 政策與程序啟動拒絕已在事件範圍內的所有部署關閉該路徑。這項控制只驗證 closure,不負責交付修補。

身為資安防禦者,我們應該這麼做

  • 盤點會暴露本機 HTTP 或 WebSocket 控制面的 agent 框架,包括 MCP 路由、debug 端點、工具啟動介面,以及只供開發者使用的 localhost 服務。
  • 所有本機路由都要驗證身分、檢查請求來源並確認權限;WebSocket 握手、升級後訊息和 MCP session 建立都不能例外。
  • 不要讓 URL 參數、模型輸出或網頁內容任意指定 command、args、env、瀏覽器或檔案系統工具;改用經過核准的 MCP server 設定檔和可執行檔允許清單。
  • 讓瀏覽器 agent 在隔離的瀏覽器工作階段、容器或不同 OS 使用者中執行;除非政策明確允許,否則不得連線至本機控制面。
  • 加入回歸測試:載入攻擊者控制的頁面,再嘗試透過 WebSocket、fetch、重新導向和 headless browser 腳本存取本機 agent 服務,確認控制面拒絕未授權請求。

結論

AutoJack 的重點不是「某個 localhost 路由有 bug」而已,而是 agent 讓原本分開的兩個世界接在一起:外部網頁內容可以透過瀏覽器 agent 觸碰本機控制面,本機控制面又能啟動程序。AIDEFEND  對這條鏈的防守重點也很明確:MCP 基準與服務身分驗證守住控制面入口,工具參數驗證和危險程式結構偵測擋住任意命令,一次性沙箱和瀏覽工作階段隔離則限制最壞情況下的主機影響。