對於許多開發者來說,AI Agent(AI 代理)的魅力在於它能透過工具調用來執行實際任務,例如讀寫資料庫或執行指令。然而,這種強大的能力如果缺乏適當的權限控制,就會變成極其危險的後門。最近在開源 AI 代理框架 Ruflo 中發現的一個高危險漏洞(CVE-2026-59726),就完整地展示了這種風險。
了解漏洞背景:什麼是 MCP 與 Ruflo
Ruflo 是一個旨在協調多個 AI 代理(Multi-agent Orchestration)的平台,讓開發者能部署一群 AI 協作完成複雜工作流。為了讓 AI 能與外部工具溝通,它使用了 Model Context Protocol (MCP),這是一種標準化的協議,讓 LLM(大型語言模型)可以透過統一的介面存取外部數據或執行特定功能。
在 Ruflo 的架構中,MCP Bridge(MCP 橋接器)扮演著翻譯官的角色,將 AI 的請求轉化為實際的工具調用。問題就在於,這個橋接器在舊版本中被設計得過於開放。
漏洞核心:未經認證的遠端指令執行
這個漏洞被命名為 RufRoot,其 CVSS 評分高達 10.0 滿分。簡單來說,漏洞原因在於配置錯誤與缺乏認證機制。
首先,Ruflo 的預設 docker-compose 配置將 MCP 橋接器的端口 3001 綁定到了 0.0.0.0。在網路工程中,綁定到 0.0.0.0 意味著該服務會監聽所有網路介面,如果伺服器沒有防火牆保護,全世界都能透過網路訪問這個端口。
其次,該橋接器在接收請求時完全沒有要求身分驗證。攻擊者只需要發送一個簡單的 HTTP POST 請求到 /mcp 端點,就可以調用 Ruflo 內建的工具。最致命的是,其中一個工具叫做 ruflo__terminal_execute,它允許執行 Shell 指令。
這意味著任何知道伺服器 IP 的人,只要發送一條指令,就能在容器內部獲得一個 Shell,達成遠端指令執行(Remote Code Execution, RCE)。
從 RCE 到 AI 記憶體中毒的連鎖反應
拿到伺服器的執行權限只是第一步,攻擊者隨後可以進行更深層的破壞:
第一是竊取金鑰。攻擊者可以讀取容器的環境變數,直接拿走與 OpenAI 或 Anthropic 等 LLM 供應商對接的 API Key,導致公司帳單暴增或數據外洩。
第二是數據竊取。由於 MongoDB 資料庫同樣預設對外開放且缺乏認證,攻擊者可以輕易下載所有用戶的對話紀錄。
第三且最隱蔽的是 AI 記憶體中毒(AI Memory Poisoning)。Ruflo 擁有一個 AgentDB 用於儲存 AI 的學習模式與記憶。攻擊者可以向這個資料庫寫入惡意的指令或錯誤的知識。這導致 AI 在未來的對話中,即使攻擊者已經離開,AI 仍會根據被篡改的記憶給出有害的回答或執行攻擊者的指令。
這將漏洞的影響從單次入侵,提升到了對 AI 行為的長期操縱。
實務上的修復與防禦建議
Ruflo 官方已在 3.16.3 版本中修復此問題。主要的修復邏輯包括將服務綁定至 loopback 介面(127.0.0.1),確保外部無法直接訪問;對 terminal_execute 增加伺服器端控制;以及強制開啟 MongoDB 認證。
對於工程師而言,這件事提供了三個重要的安全教訓:
第一,不要信任預設配置。許多開源項目的 docker-compose 為了方便開發,會將端口全部對外開放。在生產環境部署前,必須檢查所有綁定 IP,除非必要,否則應限制在內部網路。
第二,實施最小權限原則。AI 代理不應該擁有直接執行 Shell 指令的權限,除非該功能經過嚴格的審核機制或在完全隔離的沙箱(Sandbox)中運行。
第三,漏洞修復不等於風險消除。如果你的系統曾被入侵,單純更新版本是不夠的。因為 API Key 可能已被竊取,AI 的記憶體可能已被污染。正確的處置流程應該是:更新版本、輪換(Rotate)所有金鑰、審計資料庫內容,並從乾淨的鏡像重新構建容器。
來源:thehackernews.com
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。