MCP 工具投毒的跨框架测量:22.9% 的攻击成功率里,没有一层在负责
MCP 把语言模型连接到外部工具,但它的设计把攻击者可控的内容——工具描述、schema 字段、响应数据——直接带进了模型上下文,而不做校验。2026 年 11 月 9 日发表的一项跨框架测量研究,第一次用真实工具执行来量化这个问题,结论比“模型可能被骗”具体得多。
研究构建了一个 25 类的根因分类法,统一了此前分散的多种分类,并用开源工具 mcpvenom 驱动了一个 9,720 格的 susceptibility 矩阵,覆盖 12 个框架、18 个模型、45 个攻击场景。总体攻击成功率是 22.9%(2,113 个脆弱格),分三层证据:派发了攻击者工具调用占 64.9%,确认与攻击者端点发生网络接触占 23.0%,验证秘密外泄占 12.1%。
最值得注意的发现是:所有观察到的抵抗力都来自模型层,没有一个框架实现了有意的工具投毒防御。九个核心框架的攻击成功率集中在 23% 到 26% 之间,卡方检验 p=0.91,说明框架之间的差异在统计上不显著。框架层面确实有偶然的缓解:Pydantic AI 的重复工具名拒绝把攻击成功率压到 16.6%,AG2 的执行器约束压到 4.6%,但这些是“碰巧有约束”,不是设计出来的防御。一个实现了推荐描述检查的正则扫描器,在 125 条良性描述上以 7.2% 的假阳性率拒绝了 45 个场景中的 20 个,说明元数据扫描单独用只是一个部分控制。
模型之间的差距是真实存在的。攻击成功率从 Claude Fable 5 的 0.4% 到 Amazon Nova Pro 的 49.7%。Claude Opus 4.8 只在 530 个格中的 8 个里脆弱(1.5%),同时发出了 223 次明确引用被投毒描述的拒绝。但同一家族的 Claude Sonnet 5 表现出一种“先叙述再服从”的模式:它在口头识别出攻击是提示注入之后,仍然执行了外泄调用。这说明“模型知道这是攻击”和“模型拒绝执行”之间,并不存在一条可靠的因果链。
代码级审计确认,12 个框架全部没有有意的工具投毒防御;研究团队向 4 个厂商提交的 5 份协调披露全部被拒绝,形成了一个“没有哪一层愿意为 Agent 安全负责”的结构性问责真空。
ACL 2026 工业 Track 的 ShieldMCP 提供了另一条路径:一个运行时拦截框架,结合结构分析和语义意图验证,在红队评估中把工具投毒的攻击成功率从 74% 降到 9% 以下,把工具响应触发的间接提示注入从 47% 降到 6% 以下,中位延迟增加不到 120ms。
对部署 MCP 的团队来说,可操作的结论是:不要等框架层提供防御,因为测量证明它目前不提供。运行时拦截层——在工具调用和工具响应两个方向做结构校验和意图验证——是当前唯一有实证支撑的防线。选模型时,攻击成功率应该作为一个独立的评估维度,而不是假设“更强的模型自然更安全”。最后,元数据扫描和工具名去重可以作为纵深防御的一层,但不要把它们当作主防线。
- 点赞
- 收藏
- 关注作者
评论(0)