一位安全研究人员在扫描了 24 个开源 MCP (Model-Control-Protocol) 服务器项目后,发现了一个严重的沙箱命令注入漏洞,其 CVSS 评分高达 9.8。该漏洞存在于中层 AI 智能体框架 AgenticX 中,允许攻击者向运行服务器的 Docker 容器中注入任意 Shell 命令。
为什么 MCP 服务器至关重要
MCP 是让自主 AI 智能体与外部工具(文件、数据库、浏览器等)进行通信的纽带。开发者将 MCP 服务器嵌入到其应用程序中,从而赋予语言模型读取、写入和操作现实世界资源的能力。该协议本身非常轻量且被广泛采用,但每个项目的维护者需要负责确保周边代码的安全。
像 Cline 或 Aider 这样的大规模 MCP 实现已经接受了定期审计,并拥有成熟的安全流程。而此处检查的 24 个项目在 GitHub 上处于“中层”范围,星标数在 100 到 1,000 之间。这些仓库通常优先考虑功能的快速交付,而非代码的加固,从而为那些假设任何开源 MCP 服务器默认都是安全的用户的留下了盲点。
扫描过程
研究人员构建了一个扫描器,用于查找五种经典的 Web 应用攻击模式:
- 命令注入 (Command injection)
- 路径遍历 (Path traversal)
- 服务端请求伪造 (SSRF)
- SQL 注入 (SQL injection)
- 沙箱逃逸 (Sandbox escape)
在 5,911 个源文件上运行扫描器后,最初产生了 94 个警报。经过人工筛选,最终只有一个警报被确认为真实的漏洞。
AgenticX 漏洞详解
AgenticX 通过将用户提供的字符串插值到 Python f-string 中来构建 Shell 命令,然后将结果直接传递给容器的 Shell。程序没有对文件路径进行任何验证或引用处理。因此,对抗性提示(adversarial prompt)可以注入分号或其他 Shell 元字符,导致容器执行攻击者选择的任何命令。
研究人员通过以下方式修复了代码:
- 使用
shlex.quote()安全地转义语言模型提供的任何路径。 - 在构建命令之前,增加对路径遍历模式 (
../) 的显式检查。
修复后重新运行扫描器显示,风险等级大幅下降,证实了该缓解措施解决了根本问题。
谁获益,谁受损
- AI 开发者:将 MCP 服务器嵌入其产品中的开发者现在得到了一个具体的案例,展示了单个缺失的清洗步骤如何破坏整个安全链。请像对待任何外部 API 负载一样,将来自语言模型的每个参数都视为不可信输入。
另一面的事实
研究人员强调,MCP 协议本身仍然是健全的。该缺陷并非协议格式的设计弱点,而是特定实现中的编码疏忽。规模更大、经过良好审计的项目已经解决了类似问题,开源社区可以从 AgenticX 的补丁中学习。尽管如此,此次事件表明,尽管星标数不多,“中层”项目也可能隐藏高影响力的漏洞。
总结
AgenticX 中一个未经验证的 f-string 就将整个 MCP 服务器变成了执行任意代码的跳板。这一事件证明,AI 智能体生态系统的安全性与其说是取决于协议,不如说是取决于严谨的实现。开发者必须将每个 LLM 生成的参数视为具有敌意的,平台应强制执行运行时防护措施,安全工具也需要进化,以理解 AI 智能体创建的独特信任链。
Source: dev.to/easterndev/i-scanned-24-mcp-server-projects-and-found-a-real-sandbox-command-injection-cvss-98-4k9h
