AIDEFEND in Action AIA-0042 實證研究 發布於 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
7 項對應的 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,用來標示是哪個網站發起連線),不會因為目的地是 localhost 就變成本機來源。
  • MCP WebSocket 路由沒有完成身分驗證。 受影響的 MCP WebSocket 處理程序直接接受連線,沒有檢查 Origin,也沒有呼叫 WebSocket 身分驗證。程式碼中的驗證中介層處理 HTTP,其略過清單並未排除 /api/mcp;不能把 HTTP 驗證視為 WebSocket 已受保護的證據。
  • server_params 會被解碼成可啟動程序的參數。 WebSocket URL 裡的參數被 Base64 解碼後,會變成 StdioServerParams,再交給 MCP stdio client 啟動程序。若沒有允許清單,這不只是在啟動 MCP server,也可能啟動 calc.exe、PowerShell、bash 或其他攻擊者指定命令。
  • 影響是主機上的任意程序執行。 成功時,程式不是由遠端伺服器執行,而是在執行 AutoGen Studio 的開發者主機上、以該程序的權限啟動。攻擊者因此可能取得本機檔案、開發工具、環境變數、憑證與內網連線能力。
  • 防守重點是把瀏覽、控制面和程序啟動拆開。 不可信網頁不應能直接碰到本機 MCP 控制面;MCP 路由必須驗證身分與來源;可啟動的命令必須使用允許清單;即使命令真的被啟動,也應在低權限帳號、容器或一次性沙箱中執行。
  • 修補改變程序啟動參數的進入方式。commit b047730 改由 POST /api/mcp/ws/connect 在伺服器端登記參數,再讓 WebSocket 使用一次性的工作階段 ID。HTTP 身分驗證仍取決於部署設定;這不代表所有部署都已啟用驗證或完成網路隔離。

適用的 7 項 AIDEFEND 防禦手法

AID-H-021.004
Control-Plane & Oversight-Surface Isolation
極高
控制面與監督介面隔離,可以避免瀏覽器 agent 載入的不可信頁面碰到會管理 MCP、工具和程序啟動的本機控制面。這會把「瀏覽外部網址」和「改變本機 agent 執行設定」拆成兩個不同邊界。
AID-H-034.001
MCP Server Deployment Profile, Transport & Exposure Baseline
高
在 MCP server 註冊與啟動邊界套用 G003 的安全 stdio 啟動方式:由受信任的部署設定選定可執行檔與 server 程式,使用固定且經核准的參數、shell:false 和最小環境,並降低子行程權限。拒絕由呼叫者提供 command、args 與 env,不再把 server_params 直接交給 stdio_client。這項已公開的固定啟動方法適用於此邊界,但仍須獨立驗證每條註冊與替代啟動路徑。
AID-H-019.003
Browser Runtime Admission & Sanitized Observation Export Gate
高
只有在當前瀏覽器工作階段、沙箱與外部強制管控的對外連線證據,全部綁定確切任務、瀏覽器版本及政策後,才啟動瀏覽任務。證據缺少、過期或不相符時拒絕啟動,只輸出清理後、範圍受限的觀察結果。實際阻擋 loopback/WebSocket 連線另由 I-001.004 負責;瀏覽器路由攔截或呼叫者自行宣稱的驗證紀錄,不能代替實際網路路徑的證明。
AID-H-003.010
Deployed AI Software Vulnerability Remediation Lifecycle
高
若組織部署了受影響的 AutoGen Studio 原始碼版本,修補負責人必須先辨識實際執行中的脆弱版本,重建或替換成已修正路由的版本,分階段部署,並確認沒有任何受影響執行個體遺留。這項控制負責軟體修補;另一項攻擊路徑結案驗證控制才負責獨立重新執行並驗證攻擊路徑。
AID-I-001.003
Ephemeral Single-Use Sandboxes for Tools
高
把高風險命令和 MCP server 啟動流程放進一次性沙箱,可以限制命令真的被啟動後能讀到的檔案、機密值、網路與開發者工具,避免 RCE 直接變成開發者主機接管。
AID-E-004
Incident Exploit-Path Closure Verification
高
修正版 AutoGen Studio 與控制變更部署完成後,應由獨立驗證方重新執行並驗證「攻擊者頁面連到 localhost WebSocket」的原始路徑,確認身分驗證、Origin 政策與程序啟動拒絕已在事件範圍內的所有部署關閉該路徑。這項控制只驗證攻擊路徑是否已關閉,不負責交付修補。
AID-I-001.004
Sandbox Network Egress Restrictions
高
在 Chromium/Playwright 之外,強制執行已命名、預設拒絕的瀏覽器沙箱對外連線政策,並綁定確切沙箱、執行世代與任務。拒絕 loopback、私有位址與直接 socket 繞過路徑,包括網頁自行開往主機 MCP 服務的 WebSocket。G002 必須有真正強制執行政策的整合元件、可驗證的政策綁定與連線紀錄,以及從確切瀏覽器執行環境發起的測試;示範用的綁定程式碼本身不會封鎖網路。

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

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

結論

AutoJack 把不可信網頁、agent 瀏覽器、本機 MCP 啟動路由與主機程序啟動接成一條攻擊鏈。相關防禦手法須包括在實際 WebSocket 傳輸上檢查身分與 Origin、對程序啟動執行範圍明確的授權,以及由瀏覽器程序之外強制執行對外連線政策。瀏覽器啟動檢查負責驗證這些邊界的證據,不會自行建立隔離。部署修補後,仍須獨立重新執行完整路徑,確認入口與程序啟動都已受控。

最後更新: