MCP Server 供应链风险:当你的智能体工具成为攻击向量
一个开发者从公共注册中心安装了一个流行的 MCP 服务器——一个 Slack 集成、一个数据库连接器,或者是一个文件系统工具。测试时它表现得非常完美。三周后,该工具的描述在静默中发生了变化。曾经用于总结 Slack 线程的 Agent,现在正通过一个开发者从未检查过的参数字段窃取环境变量。
这并非假设。已经有恶意的 MCP 服务器包被发现在安装它们的组织中窃取电子邮件。Smithery.ai 注册中心的一个路径遍历漏洞暴露了可以控制 3,000 多个托管 MCP 服务器的身份验证令牌。流行的 mcp-remote npm 软件包(CVE-2025-6514,下载量超过 55.8 万次)包含一个任意代码执行漏洞。MCP 服务器正在成为 AI Agent 的新 “left-pad 问题”——只不过其爆炸半径包括你的凭证、你的数据以及用户的信任。
你未曾察觉的攻击面
传统的供应链攻击目 标是你的构建流水线或运行时依赖项。MCP 供应链攻击的目标则更为隐蔽:Agent 与其工具之间的语义层。
当 AI Agent 连接到 MCP 服务器时,它会将工具描述、参数模式(Schema)和响应格式摄入其上下文窗口。这些描述不仅仅是文档——它们是模型用来决定调用什么以及如何解释结果的指令。这创造了三个大多数团队从未审计过的独特攻击面。
工具描述注入是最常见的。攻击者在工具元数据中嵌入恶意指令——隐藏在特殊标签之后,埋在空白字符之后,或者塞在大多数 MCP 客户端 UI 显示的字符限制之外。针对 45 个活跃 MCP 服务器、353 个工具的研究测试发现,在 20 个 LLM Agent 中,攻击成功率高达 72.8%,而最高拒绝率低于 3%。模型看到的是完整描述,开发者看到的是截断版本。这两个视图之间的差距就是整个攻击面。
响应投毒更为微妙。一个被攻陷的工具返回带有嵌入指令的结果,从而影响后续的 Agent 行为。如果你的 Agent 调用一个搜索工具,而结果包含隐藏的提示词注入,那么 Agent 随后做出的每一个决策都可能受到损害。Agent 将工具输出视为可信数据——它没有机制来区分合法响应和武器化响应。
工具名称冲突利用了 Agent 根据名称和描述选择工具这一事实。当多个 MCP 服务器暴露同名工具时,模型可能会调用恶意变体而非合法变体。这是 AI 世界的 DLL 劫持,且大多数 MCP 客户端没有命名空间隔离来防止这种情况。
