RufRoot (CVE-2026-59726):通过未认证 MCP 桥接实现对 AI Agent 基础设施的完全入侵
1. 基本信息
- 文章标题:RufRoot:将 Agent 变成流氓管理员的 MCP 桥接漏洞
- 来源: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 密钥
- 严重程度:严重
2. 执行摘要
向 Ruflo 的 MCP Bridge(默认暴露在所有接口上)发送单个未认证的 POST 请求即可在容器内执行命令。这使得攻击者能够窃取、修改并持久化 LLM API 密钥、对话、内存和 Agent 集群。
3. 攻击流程
- 攻击者访问 TCP/3001 端口上的 Ruflo MCP Bridge。
- 攻击者无需认证即可使用
tools/list列出 233 个工具。 - 攻击者向
/mcp发送 JSON-RPCtools/call,并使用ruflo__terminal_execute执行命令。 - 攻击者使用
printenv等命令窃取 LLM 提供商 API 密钥。 - 攻击者使用受害者的密钥和计算资源创建受攻击者控制的集群和 Agent。
- 攻击者将恶意模式保存到 AgentDB 以污染未来输出的内存。
- 攻击者从未认证的 MongoDB 转储对话和元数据并将其发送到外部。
- 攻击者创建
/app/beacon.js,注入到index.js,并通过 Docker 重启在 PID 1 退出后实现持久化。 - 攻击者清除 shell 历史记录。
4. 攻击者位置和执行位置
攻击者从任何网络可达位置发送 HTTP POST 请求。命令以 Docker 容器内的 node 用户(UID 1000)身份运行,可访问内部 Docker 网络、MongoDB、环境变量和 Agent API。
5. 对受害者和管理员的可见性
- 无需用户操作或提示。
- 活动表现为类似正常 MCP 工具调用的 HTTP 请求。
- 管理仪表板上可能出现新的集群、Agent、内存模式和对话访问。
- 主机级 EDR 可能无法检测到
node用户活动、临时 MongoDB 客户端使用和容器内的文件修改。
6. 成功和失败条件
成功条件
- 使用存在漏洞的 Ruflo 版本且 TCP/3001 可被攻击者访问。
-
/mcp缺少认证、IP 限制和反向代理保护。 - 默认共享环境变量、未认证的 MongoDB 和重启策略保持不变。
失败条件
- 更新到已修复的版本。
- 将 Bridge 限制为 localhost 或管理网络,并添加认证和网络策略。
- 将容器与敏感环境变量、内部数据库和出站通信隔离。
7. 成功攻击的影响
攻击导致 LLM 预算和 API 权限被未经授权使用、对话和敏感数据被窃取、AI 内存被长期污染、创建受攻击者控制的 Agent 以及容器持久化。如果 Agent 具有访问内部数据库、源代码或云权限的能力,影响将超出 Ruflo 本身。
8. 可观察的日志
- 电子邮件:通常无。
- 代理/SWG/DNS:来自 Ruflo 的未知 OAST/外部目标、LLM API 流量突然激增以及包下载。
-
终端/EDR:
node子进程、printenv、MongoDB 客户端、/tmp、/app/beacon.js、对index.js的修改以及 PID 1 退出。 - 身份/IdP:LLM API 密钥的异常使用。人类 ID 日志可能不会显示此活动。
- SaaS/云:新的集群/Agent、异常工具调用、AgentDB 写入以及 EC2/容器审计。
-
网络:对 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 和密钥位置。
-
终端:保留容器文件系统差异、进程、
/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.