你安装了一个MCP Server,看起来是个普通计算器。但它在偷偷读你的SSH私钥,再通过隐藏参数把密钥发给攻击者。这不是假设,是Invariant Labs已经复现的真实攻击。
先说结论
MCP正在从"方便集成的协议层"变成"必须重点审计的攻击面"。OWASP已经发布MCP Top 10(Beta阶段),Invariant Labs发现了Tool Poisoning等实际漏洞。你安装的每个MCP Server,都可能成为黑客攻击你的跳板。
MCP安全现状:生态爆发,安全审计几乎为零
MCP生态正在爆发。MCP Store收录了40000+个Server,Zapier MCP处理数百万请求。
但安全审计呢?几乎为零。
OWASP在2026年4月发布了MCP Top 10(Beta),总结了10大安全风险。这不是学术讨论——每一条都有实际攻击案例。
OWASP MCP Top 10 概览:
| 编号 | 风险 | 核心问题 | 后果 |
|---|---|---|---|
| MCP01 | Token管理不当与Secret暴露 | 凭据硬编码、落入日志 | 攻击者获取系统访问权 |
| MCP02 | 范围蔓延导致权限提升 | 临时权限不断扩大 | 仓库修改、系统控制 |
| MCP03 | Tool Poisoning | 工具/插件/输出被投毒 | 模型行为被误导、劫持 |
| MCP04 | 供应链攻击与依赖篡改 | 依赖、连接器被污染 | 引入后门、改变Agent逻辑 |
| MCP05 | 命令注入与执行 | 未校验输入拼接命令 | 任意命令执行 |
| MCP06 | 意图劫持/提示注入 | 恶意上下文成"第二指令通道" | Agent偏离用户目标 |
| MCP07 | 认证与授权不足 | 身份校验和访问控制不严 | 非授权访问、越权调用 |
| MCP08 | 缺乏审计与遥测 | 工具调用日志不完整 | 事故难调查 |
| MCP09 | Shadow MCP Servers | 未治理的MCP实例私自运行 | 默认口令、无审计暴露 |
| MCP10 | 上下文注入与过度共享 | 共享上下文作用域不清 | 敏感信息跨任务泄露 |
10项收敛为4大工程主题:身份与权限(MCP01/02/07)、上下文与指令(MCP06/10)、工具与供应链(MCP03/04/05)、可观测性与治理(MCP08/09)。
最危险的3种攻击:代码示例+实战案例
Tool Poisoning:隐藏在工具描述里的恶意指令
这是Invariant Labs在2025年4月发现的攻击,也是MCP安全的标志性事件。
攻击原理:恶意MCP Server在工具描述中嵌入<IMPORTANT>标签的隐藏指令。用户UI看不到,但AI模型会执行。
实际攻击案例(来源:Invariant Labs报告):
一个看似无害的add(a, b)计算器工具,隐藏指令让AI:
- 读取
~/.cursor/mcp.json(含其他MCP Server凭据) - 读取
~/.ssh/id_rsa(SSH私钥) - 将内容通过
sidenote参数发送给恶意服务器
代码示例(攻击原理):
| |
受影响平台:Anthropic、OpenAI、Zapier、Cursor等所有未验证工具描述的MCP客户端。
MCP Rug Pull:你批准的工具后来变坏了
这个攻击借鉴了加密货币领域的"Rug Pull"概念。
攻击原理:工具首次安装时是正常的,通过审核后,开发者(或被入侵的供应链)悄悄更新为恶意版本。
与PyPI供应链攻击的类比:就像npm包被劫持后注入挖矿代码。MCP生态的依赖链同样脆弱——你的AI Agent信任的每个Server,都可能在下一次更新中"叛变"。
防御核心:版本锁定+哈希校验。每次调用前验证工具描述的完整性。
Tool Shadowing:一个工具劫持另一个工具
这个攻击更隐蔽。
攻击原理:恶意Server通过工具描述,劫持可信Server的行为。实验中,一个加法工具的描述让AI将所有邮件发送到攻击者邮箱——即使用户明确指定了其他收件人。
本质:MCP的信任模型完全依赖工具描述的可见性,没有真正的验证机制。工具描述就是"指令",而指令可以被伪造。
防御清单:开发者、客户端开发者、企业各该做什么
| 视角 | 措施 | 说明 |
|---|---|---|
| 开发者 | 逐行审查工具描述 | 不要盲信Server,读完每个tool description再批准 |
| 开发者 | 锁定版本+哈希校验 | 用hash/checksum验证Server完整性,防Rug Pull |
| 开发者 | 最小权限原则 | 每个Server只授予必要权限,拒绝"全权限"请求 |
| 开发者 | 定期审计配置 | 检查mcp.json中每个Server的来源和更新日志 |
| 客户端开发者 | 完整展示工具描述 | 用户UI和AI都必须看到完整描述,区分可见/隐藏指令 |
| 客户端开发者 | 工具描述完整性校验 | 用hash验证工具描述未被篡改 |
| 客户端开发者 | 严格数据流隔离 | 不同MCP Server之间不允许任意数据传递 |
| 客户端开发者 | 完善审计日志 | 记录每次工具调用、上下文变更、行为日志 |
| 企业 | MCP Server准入机制 | 建立白名单,只允许经过审计的Server进入生产环境 |
| 企业 | 持续监控 | 实时监控MCP调用行为,异常自动告警 |
| 企业 | 员工安全培训 | 让每个使用AI Agent的员工了解MCP风险 |
写在最后
MCP不是安全的,但这不意味着不能用。关键是改变心态:每个MCP Server都是不可信的,直到你验证了它。
OWASP MCP Top 10给了我们审计框架,Invariant Labs的Tool Poisoning攻击给了我们真实案例。现在缺的不是知识,是行动。
从今天开始,检查你安装的每个MCP Server。读它的工具描述,查它的依赖链,锁它的版本。你的AI Agent能调用的工具,黑客也能利用。
关注 varkm,一起学习,一起成长
参考来源:
- OWASP MCP Top 10:https://owasp.org/www-project-mcp-top-10/
- Invariant Labs Tool Poisoning报告:https://invariantlabs.ai/blog/mcp-security-notification-tool-poisoning-attacks
- 代码示例来自Invariant Labs报告,已注明