Anoymask

RufRoot (CVE-2026-59726):通过未认证 MCP 桥接实现对 AI Agent 基础设施的完全入侵

1. 基本信息

2. 执行摘要

向 Ruflo 的 MCP Bridge(默认暴露在所有接口上)发送单个未认证的 POST 请求即可在容器内执行命令。这使得攻击者能够窃取、修改并持久化 LLM API 密钥、对话、内存和 Agent 集群。

3. 攻击流程

  1. 攻击者访问 TCP/3001 端口上的 Ruflo MCP Bridge。
  2. 攻击者无需认证即可使用 tools/list 列出 233 个工具。
  3. 攻击者向 /mcp 发送 JSON-RPC tools/call,并使用 ruflo__terminal_execute 执行命令。
  4. 攻击者使用 printenv 等命令窃取 LLM 提供商 API 密钥。
  5. 攻击者使用受害者的密钥和计算资源创建受攻击者控制的集群和 Agent。
  6. 攻击者将恶意模式保存到 AgentDB 以污染未来输出的内存。
  7. 攻击者从未认证的 MongoDB 转储对话和元数据并将其发送到外部。
  8. 攻击者创建 /app/beacon.js,注入到 index.js,并通过 Docker 重启在 PID 1 退出后实现持久化。
  9. 攻击者清除 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 流量突然激增以及包下载。
  • 终端/EDRnode 子进程、printenv、MongoDB 客户端、/tmp/app/beacon.js、对 index.js 的修改以及 PID 1 退出。
  • 身份/IdP:LLM API 密钥的异常使用。人类 ID 日志可能不会显示此活动。
  • SaaS/云:新的集群/Agent、异常工具调用、AgentDB 写入以及 EC2/容器审计。
  • 网络:对 TCP/3001 /mcptools/listterminal_execute 的外部请求,以及来自容器的 OAST 和数据泄露。

9. 攻击成功判定

  • 仅接触:端口 3001 扫描、tools/list
  • 用户操作:不需要。
  • 初始执行terminal_execute 响应、OAST 回调。
  • 恶意软件或认证成功:API 密钥获取和未经授权使用、创建攻击者 Agent。
  • 数据窃取/会话入侵:MongoDB 对话转储和外部传输。
  • 后续入侵确认:内存投毒、beacon 持久化以及访问 Ruflo 之外的云或内部资源。

10. 调查手册

  • 触发器:对端口 3001 的外部访问、未认证的 /mcpterminal_execute、创建未知 Agent。
  • 初始验证:确认版本、暴露范围、访问日志、容器 ID 和密钥位置。
  • 终端:保留容器文件系统差异、进程、/app/tmp、重启历史和 Docker 事件。
  • 认证/云:审查所有 LLM/API 密钥的使用历史、云审计日志和密钥管理系统。
  • 后续活动:调查 AgentDB、MongoDB、对话、生成的 Agent、外部通信和可访问的内部资源。
  • 遏制:阻止端口 3001、隔离并重建容器、撤销所有密钥、添加数据库凭据,并将内存和代码恢复到已知良好状态。
  • 状态分类:已暴露/已枚举/RCE/密钥被盗/Agent 或内存受入侵/数据已泄露/下游入侵。

11. 防御和检测思路

  • 单一事件:外部 POST /mcpterminal_executeprintenvagentdb_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 基础设施暴露给内部或外部网络。