RufRoot (CVE-2026-59726):透過未驗證 MCP Bridge 全面入侵 AI Agent 基礎架構
1. 基本資訊
- 文章標題:RufRoot:MCP Bridge 漏洞將 Agent 變成惡意管理員
- 來源:Noma Labs(由 SecurityWeek 於 2026-07-30 報導)
- 發布日期:2026-07-29
- 原始文章: https://noma.security/blog/rufroot-the-mcp-bridge-vulnerability-that-turns-agents-into-rogue-admins-cve-2026-59726/
- 相關來源: https://www.securityweek.com/critical-ruflo-flaw-lets-attackers-spawn-rogue-ai-swarms/
- 相關實體:Ruflo、MCP Bridge、CVE-2026-59726、Docker、MongoDB、OpenAI/Anthropic/Google/OpenRouter API 金鑰
- 嚴重性:Critical(嚴重)
2. 執行摘要
只要對 Ruflo 的 MCP Bridge 發送單一未驗證的 POST 請求(預設暴露在所有介面上),即可在容器內執行命令。攻擊者因此能竊取、修改並持久化 LLM API 金鑰、對話、記憶體及 Agent 群組。
3. 攻擊流程
- 攻擊者連線至 Ruflo MCP Bridge 的 TCP/3001 連接埠。
- 攻擊者無需驗證即可使用
tools/list列出 233 項工具。 - 攻擊者傳送 JSON-RPC
tools/call至/mcp,並利用ruflo__terminal_execute執行命令。 - 攻擊者透過
printenv等指令竊取 LLM 供應商 API 金鑰。 - 攻擊者利用受害者的金鑰與運算資源建立受控的 swarm 與 agent。
- 攻擊者將惡意模式存入 AgentDB,毒害未來輸出的記憶體。
- 攻擊者從未驗證的 MongoDB 傾印對話與中繼資料,並將其傳送至外部。
- 攻擊者建立
/app/beacon.js、注入載入至index.js,並透過 Docker 重啟在 PID 1 結束後達成持久化。 - 攻擊者清除 shell 歷史記錄。
4. 攻擊者位置與執行位置
攻擊者可從任何可達網路的位置發送 HTTP POST 請求。命令以容器內的 node 使用者(UID 1000)身分執行,能存取內部 Docker 網路、MongoDB、環境變數及 Agent API。
5. 受害者與管理員的可見度
- 無需任何使用者操作或提示。
- 活動看起來與一般 MCP 工具呼叫的 HTTP 請求相似。
- 新的 swarm、agent、記憶模式及對話存取可能出現在管理儀表板上。
- 僅靠主機層級 EDR 可能遺漏
node使用者活動、暫時性 MongoDB 用戶端存取,以及容器內的檔案修改。
6. 成功與失敗條件
成功條件
- 使用存在漏洞的 Ruflo 版本,且 TCP/3001 可供攻擊者存取。
/mcp缺乏驗證、IP 限制及反向代理保護。- 預設共享環境變數、未驗證 MongoDB 及重啟政策仍然存在。
失敗條件
- 更新至已修補版本。
- 將 Bridge 限制為 localhost 或管理網路,並加入驗證與網路政策。
- 將容器與敏感環境變數、內部資料庫及外部通訊隔離。
7. 成功攻擊的影響
攻擊將導致 LLM 預算與 API 權限遭未授權使用、對話與敏感資料遭竊取、AI 記憶體長期污染、建立受控 Agent,以及容器持久化。若 Agent 具備內部資料庫、原始碼或雲端權限,影響範圍將超出 Ruflo 本身。
8. 可觀察日誌
- 電子郵件:通常無。
- Proxy/SWG/DNS:來自 Ruflo 的未知 OAST/外部目的地、LLM API 流量突增,以及套件下載。
-
Endpoint/EDR:
node子程序、printenv、MongoDB 用戶端、/tmp、/app/beacon.js、index.js修改,以及 PID 1 結束。 - Identity/IdP:LLM API 金鑰異常使用。人類 ID 日誌可能無法顯示此活動。
- SaaS/Cloud:新 swarm/agent、異常工具呼叫、AgentDB 寫入,以及 EC2/容器稽核。
-
Network:對 TCP/3001
/mcp、tools/list及terminal_execute的外部請求,以及來自容器的 OAST 與資料外傳。
9. 攻擊成功判定
-
僅接觸:掃描連接埠 3001、
tools/list。 - 使用者操作:不需要。
-
初始執行:
terminal_execute回應、OAST 回呼。 - 惡意軟體或驗證成功:取得並未授權使用 API 金鑰、建立攻擊者 Agent。
- 資料竊取 / 工作階段入侵:MongoDB 對話傾印及外部傳輸。
- 後續入侵確認:記憶體污染、beacon 持久化,以及存取 Ruflo 以外的雲端或內部資源。
10. 調查手冊
-
觸發條件:外部存取連接埠 3001、未驗證
/mcp、terminal_execute、建立未知 Agent。 - 初步驗證:確認版本、暴露範圍、存取日誌、容器 ID 及金鑰位置。
-
Endpoint:保留容器檔案系統差異、程序、
/app與/tmp、重啟歷史及 Docker 事件。 - 驗證 / 雲端:檢閱所有 LLM/API 金鑰的使用歷史、雲端稽核日誌及密鑰管理系統。
- 後續活動:調查 AgentDB、MongoDB、對話、已產生 Agent、外部通訊,以及可存取的內部資源。
- 遏制:封鎖連接埠 3001、隔離並重建容器、撤銷所有金鑰、加入資料庫憑證,並將記憶體與程式碼還原至已知良好狀態。
- 狀態分類:已暴露 / 已列舉 / RCE / 密鑰遭竊 / Agent 或記憶體遭入侵 / 資料外洩 / 下游入侵。
11. 防禦與偵測建議
-
單一事件:外部
POST /mcp、terminal_execute、printenv、agentdb_pattern-store、新 beacon。 -
時間軸關聯:
tools/list→ Shell 執行 → 環境變數列舉 → Agent 建立 → 資料庫傾印 → 檔案修改 → 重啟。 - 狩獵:搜尋公開或內部暴露連接埠 3001 的 Ruflo 實例、影子 AI 資產,以及異常 LLM 金鑰使用。
- 日誌缺口:若無 MCP 工具稽核、容器程序日誌及 AgentDB 變更歷史,則無法判定修改範圍。
- 優先行動:更新軟體、限制公開存取、實作驗證、隔離密鑰、控管出口流量、強制容器最小權限,並將 AI 運作日誌整合至 SIEM。
12. 事實 / 推論 / 假設
事實
- Noma Labs 已驗證在預設 AWS EC2 設定下執行 8 階段 PoC。
/mcp暴露 233 項工具且無需驗證,並可透過繞過阻擋清單執行 shell。- 即使 UID 為 1000,攻擊者仍可存取 API 金鑰、對話、資料庫、記憶體及持久化機制。
推論
- 這是 AI 控制平面中的未驗證 RCE,而非 LLM 提示注入。
- Agent 基礎架構權限越大,下游影響越大。
假設
- 要求每個 MCP 呼叫皆進行主體驗證與政策決策日誌記錄,將大幅降低類似漏洞的影響。
13. MITRE ATT&CK 對應
- 高信心:T1190 利用面向公眾的應用程式、T1059 命令與腳本解譯器、T1552.001 檔案/環境中的憑證、T1005 從本地系統取得資料、T1505 伺服器軟體元件、T1070 指標移除。
- 中信心:T1098 帳戶操作(若將 Agent 建立視為身分操作)、T1556 修改驗證程序、T1041 透過 C2 外洩。
14. 未知事項與進一步調查
- 已修補版本及目前部署數量。
- Bridge 存取日誌的預設保留期間。
- 已知在野主動利用的存在性。
- 容器逃逸的可能性。
- 遭竊金鑰相關的組織特定權限。
15. 對 SOC 與一般組織的影響
開發人員獨立部署的影子 AI 常繞過資產清冊,並常具備 API 金鑰與內部網路存取權限。SOC 必須將不僅是 AI 產品名稱,同時也將 MCP Bridge 監聽連接埠、工具稽核、Agent ID 及記憶體變更視為新的監控目標。
16. 依角色總結
- 針對 SOC 團隊:偵測連接埠 3001 暴露、MCP 工具列舉、Shell 執行、金鑰使用及 Agent/記憶體修改的鏈結。
- 針對管理員:更新並取消發布 Ruflo、輪換所有 API 金鑰,以及重建容器。
- 針對使用者:未經適當授權,請勿將 AI Agent 基礎架構暴露於內部或外部網路。
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.