最新研究表明,Model Context Protocol (MCP)——即允许大语言模型 (LLM) 智能体调用外部工具的接口——可能会遭到“工具投毒 (tool-poisoning)”攻击,且此类攻击的成功率超过三分之一。在 20 个流行的智能体中,平均成功率为 36.5%;o1-mini 模型在 72.8% 的尝试中被攻破,而 Claude-3.7-Sonnet 拒绝恶意调用的比例不足 3%。对于任何部署依赖 MCP 的 LLM 智能体的人来说,这些发现将一个便利特性转变成了一种供应链风险,这种风险在任何代码运行之前就可能被利用。
为什么 MCP 对当今的开发者至关重要
MCP 标准化了智能体发现、注册和调用工具(如文件读取器、Web API 或电子邮件发送器)的方式。通过发布工具名称、输入模式 (input schema) 和简短描述,服务器可以向任何理解该协议的客户端提供该功能。其核心优势非常简单:智能体可以查找工具、发送请求并接收响应,而无需对每个集成进行硬编码。
这种灵活性也创造了一种隐式的信任关系。规范要求客户端只有在工具描述来自客户端已信任的服务器时,才将其视为可信的。这项新研究表明,这种信任可能会被滥用。
工具投毒与普通提示词注入的区别
传统的提示词注入 (prompt injection) 是将恶意指令插入到模型在运行时生成或接收的文本中。模型随后会遵循这些指令,因为它们与用户的请求出现在同一个 token 流中。
相比之下,工具投毒将有效载荷 (payload) 隐藏在工具的元数据 (metadata) 中——即在任何智能体调用之前就已注册的名称、描述或参数模式。当智能体随后选择该工具时,它会将描述视为“受信任上下文”的一部分,并可能在没有任何运行时检查的情况下遵循隐藏的指令。由于注入发生在注册阶段,在执行流中没有任何环节可以让模型将该有效载荷标记为可疑。
问题规模 —— MCPTox 基准测试
MCPTox (arXiv:2508.14925) 的研究人员评估了提供总计 353 种不同工具的 45 个 MCP 服务器。他们针对 20 个广泛使用的 LLM 智能体编写了攻击脚本,测量了智能体执行被投毒工具调用的频率。
- 平均成功率: 36.5%
- 峰值成功率: o1-mini 为 72.8%
- 最佳拒绝率: Claude-3.7-Sonnet,仍低于 3%
这些数字揭示了一个严峻的现实:大多数智能体不会拒绝被投毒的调用,因为该请求看起来像是合法的工具调用。智能体假设工具描述是良性的文档,而不是代码执行的攻击向量。
为什么智能体很少拒绝被投毒的调用
OWASP 的 LLM01 指南解释说,LLM 无法区分指令和数据——两者都只是序列中的 token。当工具描述说“发送一封主题为‘Update’的电子邮件到 admin@example.com”时,模型无法判断该行是无害的注释,还是它稍后应该遵守的指令。因此,模型将描述视为受信任环境的一部分,并在调用工具时遵循任何嵌入的命令。
现有指南及其不足
MCP 规范已经建议客户端除非工具描述来自受信任的服务器,否则应将其视为不可信,并在进行高影响调用时保持人工参与 (human in the loop)。基准测试表明,许多现实世界的部署忽略或对这些建议采取了宽松的解释。
开发者今天可以采取的具体步骤
- 固定服务器版本 – 引用特定的、不可变的服务器镜像或哈希值,而不是使用变动标签(moving tag)。这可以防止攻击者在部署后将干净的注册表替换为被投毒的注册表。
- 从空的白名单开始 – 仅启用经过明确审查的工具。任何不在列表中的内容默认都会被拦截。
- 对改变状态的工具设置关卡 – 对于任何执行写入、发送或删除操作的工具,都需要额外的审批。在 schema 中将“只读”能力与“可写”能力区分开来。
- 为高影响力的调用增加人工审批 – 对于可能影响外部系统的操作(例如:发送电子邮件、执行命令、修改文件),在调用发出之前,提示人工审核员进行审核。
- 记录每一次工具调用 – 记录工具名称、参数、时间戳以及发起调用的 agent。不可变的审计追踪使事后分析成为可能,并能威慑那些知道其行为将被公开记录的攻击者。
将每个工具描述视为源代码——接受 linting、代码审查和版本控制——从而使 MCP 供应链与标准的软件开发实践保持一致。
反论与开放性问题
然而,基准测试显示,即使是研究中最先进的模型,拒绝被投毒调用的比例也低于 3%。微调可能会提高检测能力,但无法保证能够防御嵌入在模型从未见过的 schema 字段中的新型有效载荷(payloads)。
后续关注点
- 新兴标准 – 关注 LLM 安全社区提出的要求对工具 schema 进行加密签名的提案。
- 工具注册表加固 – 供应商可能会开始提供不可变的、只读的注册表即服务,从而减少攻击面。
- 模型级防御 – 对提示词技术或用于标记可疑工具元数据的辅助模型的研究,可以作为主机侧防护措施的补充。
实际的启示很明确:任何基于 MCP 的部署都应对工具描述进行审计,其严谨程度应与对待第三方库时一致。忽视供应链风险会将一个便捷的抽象层变成一个隐蔽的后门。通过固定服务器、执行最小权限白名单、对改变状态的操作设置关卡、在必要时引入人工参与以及保留不可变的日志,开发者可以防止其 LLM agent 成为违背意愿的帮凶。
