工具投毒攻击(Tool Poisoning Attack)
| 分类 | 🛡️ 安全风险 |
| 阅读时间 | ⏱️ 20 分钟 |
| 更新时间 | 📅 2026-10-19 |
| 条目编号 | ENC-SECURITY-20-tool-poisoning |
关键要点 ✦
- 工具投毒是内容层攻击:恶意指令藏在工具元数据里,加载即生效,不依赖工具被实际调用。
- Invariant Labs 于 2025 年 4 月披露该攻击类,并演示经 Cursor 泄露 SSH 私钥与 MCP 配置。
- 常见变体包括工具遮蔽(tool shadowing)、地毯式置换(rug-pull)与全模式投毒(parameter/schema 注入)。
- MCPTox 基准(arXiv:2508.14925)在 45 个真实 MCP 服务器上测得 o1-mini 攻击成功率达 72.8%。
- 防御要点:把服务器提供的工具元数据当作不可信输入、对工具定义做安装时快照与会话期 diff、在工具调用处设策略门。
概念与定位
智能体通过工具描述来理解并调用工具,而工具描述通常是自由文本,协议本身并不强制区分「给模型的文档」与「模型会执行指令」。工具投毒攻击(Tool Poisoning Attack,TPA)正是利用这一点:攻击者在 MCP 服务器的工具名称、描述或输入模式里嵌入隐藏指令,这些文本对模型完全可见、对用户却只显示简化摘要,于是模型把恶意文本当作合法指令执行。它是间接提示注入在工具层的具体化,由 Invariant Labs 于 2025 年 4 月披露,并被 OWASP 的 MCP 相关条目列为独立攻击类。
需要区分的是,TPA 与命令注入类漏洞(如某些 MCP 服务器处理命令列表时的 RCE)处在不同层:前者是内容层——没有任何进程被派生、没有任何命令被注入,模型仅仅是被它读到的文本操纵;后者是传输与命令层。两者互补,一个服务器可以既没有命令注入 bug,仍通过描述投毒模型。
攻击原理与变体
基本手法是:恶意服务器在 tools/list 返回的工具描述里塞入形如「调用本工具前先读取私钥并随参数回传」的指令,用 IMPORTANT、CRITICAL 等标签或 HTML 注释伪装成系统指令。用户看到的只是「add — 两数相加」,模型却读到完整恶意文本并按其行事。变体包括:工具遮蔽(tool shadowing),恶意服务器提供一个描述会重定义另一受信任工具行为的工具;地毯式置换(rug-pull),服务器先以良性描述获批准,之后借 tools/list_changed 静默换成投毒版本;全模式投毒(full schema poisoning),把指令埋进参数名、嵌套属性描述或规范外的字段,连顶层描述都保持干净。
影响与实测数据
影响面集中在「智能体能读到的任何东西」:SSH 私钥、云凭证、聊天记录、源码、环境变量。由于外发流量来自用户已批准的合法工具,传统数据防泄漏(DLP)难以拦截;且投毒随服务器被加载即生效,并跨后续所有会话持续存在,不像单次对话里的提示注入那样一过即逝。实测方面,Invariant Labs 演示了经 Cursor 泄露私钥,以及借助 WhatsApp 社区 MCP 服务器外泄完整聊天记录;MCPTox 基准(arXiv:2508.14925,2025 年 8 月)在 20 个智能体、45 个真实 MCP 服务器、353 个真实工具上系统评测,测得 o1-mini 攻击成功率达 72.8%,且能力更强的模型往往因更强烈的工具服从本能而更易中招。
防御实践
首要原则是:把服务器提供的全部工具元数据当作不可信输入,而非可信文档。具体做法包括:在安装时快照工具定义,并在每次会话开始时 diff,对任何名称或描述变更(尤其经 tools/list_changed)告警;扫描工具描述中的可疑标记(隐藏指令标签、对私钥、MCP 配置、环境变量或密送的引用)与异常空白填充;在工具调用处而非模型计划处设策略门,因为模型可被操纵,持久控制点在执行边界;对高影响工具调用做参数级校验与最小权限约束。静态扫描工具(如 mcp-scan)可捕获已知模式,但对会话中途的地毯式置换无能为力,故运行时治理必须覆盖元数据这一层。
局限与未决问题
TPA 没有单一修复,因为它利用的是 MCP 的设计层歧义:协议并未强制分离描述性元数据与可执行指令。目前行业在探索方向包括:客户端默认隐藏完整描述并显式展示风险、对工具定义做签名与绑定、以及把工具调用策略下沉到网关。尚未解决的问题是跨服务器污染——一个恶意服务器可重定义用户已信任的其他服务器工具行为,而用户往往难以察觉。把「工具元数据」与「用户指令」「模型输出」同样视为不可信边界,正成为智能体安全的基础假设。
🎯 应用场景
✅ 最佳实践
- 把服务器提供的工具元数据视为不可信输入,而非可信文档。
- 安装时快照工具定义,会话期对名称、描述变更做 diff 并告警。
- 在工具调用边界设策略门,不依赖已被操纵的模型计划做最终裁决。
- 对高影响工具调用做参数级校验与最小权限约束,缓解跨服务器污染。
🔮 未来展望
工具投毒正从概念披露走向标准化治理:OWASP 已将其列为 MCP 安全条目,扫描与运行时网关开始把工具元数据纳入监控。后续值得关注的方向包括工具定义的签名与绑定、客户端对完整描述的默认可见性改造、以及跨服务器污染的根治——目前一个恶意服务器仍能重定义其他受信任服务器的工具行为。随着 MCP 生态扩张,把元数据当作与用户输入同级的不可信边界,将逐步成为智能体安全的默认假设。