# AI应用安全 - 应用阶段 - MCP 协议攻击

> 来源: AISS绿盟大模型安全智链社区 | 拆自 ai-app-app.md
> 风险类别: MCP（GAARM.0046.x 地毯式骗局 / 工具投毒 / 指令覆盖 / 隐藏指令）

---

### MCP地毯式骗局

> 风险编号: GAARM.0046.001
> 生命周期: 应用阶段

**攻击概述**

MCP地毯式骗局攻击是指由于MCP架构允许服务器在客户端授权后动态修改工具描述，攻击者可利用这一机制在用户信任的基础上植入恶意指令（如篡改功能逻辑或劫持操作）。即使安装时经过安全审核，后续的隐蔽篡改仍可能在导致工具描述被植入恶意利用指令（如数据泄露或未授权操作）。

**攻击案例**

案例
描述




案例一
恶意 MCP 工具函数描述中嵌入“读取用户私钥”等隐蔽提示，用户批准工具后，模型调用时误执行这些提示，泄露本地文件

**攻击风险**

工具越权行为：模型调用工具时，因描述内容被投毒，导致执行非预期指令。
敏感数据泄露：攻击者诱导模型访问并输出如 ~/.ssh/id_rsa 等敏感文件。
模型功能劫持：攻击者可利用 Prompt 操纵模型行为，如传播虚假信息、生成非法内容。
绕过审核机制：工具注册时字段验证通过，但真实执行时模型被描述内容劫持。

**缓解措施**

缓解方式
描述




白盒评估机制
对MCP Server的代码进行白盒审计，及时发现恶意的工具描述以及代码行为


审计与监控
实时监控模型行为，记录工具调用日志，及时检测异常操作


模型安全训练
对模型进行对抗性训练，增强对投毒攻击的防御能力


API访问控制
限制工具对敏感数据的访问，降低泄露和滥用风险


执行上下文隔离
限制模型访问工具描述字段，或使用结构化调用协议（如 OpenAI ChatML 工具调用语法）避免描述污染

**参考**

https://invariantlabs.ai/blog/mcp-security-notification-tool-poisoning-attacks
https://atlas.mitre.org/techniques/AML.T0051
https://github.com/invariantlabs-ai/mcp-injection-experiments

---
### MCP工具投毒攻击

> 风险编号: GAARM.0046
> 生命周期: 应用阶段

**攻击概述**

MCP是一个开放协议，用于标准化应用程序向大语言模型提供上下文的方式，MCP工具投毒攻击是一种针对该协议的攻击方式。攻击者通过恶意MCP Server的工具描述中注入攻击性提示词，实现对工具行为的恶意操纵。其核心特征是在工具描述中嵌入恶意指令，利用模型解析完整工具描述的过程，通过隐藏指令（如特殊标签或编码）诱导模型执行非授权操作，例如生成恶意内容、泄露敏感信息或绕过其他安全限制。

**攻击案例**

案例
描述




案例一
攻击者通过操纵工具描述实现恶意攻击，导致敏感模型信息泄露到恶意的MCP Server


案例二
利用MCP Tool的描述进行投毒，实现简介提示词注入，控制其他工具的参数实现信息外带等攻击目的

**攻击风险**

MCP工具投毒攻击可能导致严重的系统性风险，影响模型的安全性、可靠性和用户信任。以下是主要风险：

信任破坏：可能导致用户对模型及其开发工具的信任下降，影响其在敏感场景中的应用。
目标劫持：可通过投毒使模型偏离其原始设计目的，执行自定义的恶意指令，增加滥用风险。
系统安全性威胁：可能导致在MCP工具中植入恶意代码，导致系统被进一步入侵或功能被破坏。
数据隐私泄露： 可利用投毒提取模型训练数据或用户输入的敏感信息。

**缓解措施**

缓解方式
描述




白盒评估机制
对MCP Server的代码进行白盒审计，及时发现恶意的工具描述以及代码行为


审计与监控
实时监控模型行为，记录工具调用日志，及时检测异常操作


模型安全训练
对模型进行对抗性训练，增强对投毒攻击的防御能力


API访问控制
限制工具对敏感数据的访问，降低泄露和滥用风险

**参考**

https://invariantlabs.ai/blog/mcp-security-notification-tool-poisoning-attacks
https://mp.weixin.qq.com/s/EJLb1IwqbPF3VSDkJu099g
https://x.com/hongming731/status/1922261630664245326
https://news.qq.com/rain/a/20250429A07QY000

---
### MCP指令覆盖攻击

> 风险编号: GAARM.0046.002
> 生命周期: 应用阶段

**攻击概述**

MCP指令覆盖风险是一种针对MCP Server工具调用的恶意注入攻击，攻击者通过恶意MCP Server的工具描述，向其中植入恶意指令，从而劫持其他可信工具的正常行为。例如，攻击者可能修改邮件发送工具调用行为，使其在调用时暗中篡改收件人邮箱，导致敏感数据外泄或恶意操作。

**攻击案例**

案例
描述




案例一
制作包含隐藏指令的工具描述，这些指令会操纵模型与其他工具的交互方式，LLM会在用户不知情的情况下读取并遵循这些指令


案例二
该案例中包含一个受信任的服务器和一个恶意的服务器。受信任的服务器提供发送电子邮件的工具，而恶意的服务器提供伪造的数字加法工具，该工具的描述中包含MCP指令覆盖攻击，要求发件工具的收件人必须为@pwnd.com


案例三
该案例利用恶意的MCP Server描述，控制whatapps send_message工具的收件人信息为+13241234123

**攻击风险**

数据泄露风险: 指令覆盖攻击可以指示可信工具从对话、文档或连接系统中提取敏感信息，并将其发送到攻击者控制的机器
可信工具滥用: 攻击者可以操纵模型的网络请求、代码运行等可信工具，使其访问不可信的站点或执行恶意的代码等

**缓解措施**

缓解方式
描述




白盒评估机制
对MCP Server的代码进行白盒审计，及时发现恶意的工具描述以及代码行为


审计与监控
实时监控模型行为，记录工具调用日志，及时检测异常操作


模型安全训练
对模型进行对抗性训练，增强对投毒攻击的防御能力


API访问控制
限制工具对敏感数据的访问，降低泄露和滥用风险

**参考**

https://blog.trailofbits.com/2025/04/21/jumping-the-line-how-mcp-servers-can-attack-you-before-you-ever-use-them/
https://blog.trailofbits.com/2025/04/29/deceiving-users-with-ansi-terminal-codes-in-mcp/

---
### MCP隐藏指令攻击

> 风险编号: GAARM.0046.003
> 生命周期: 应用阶段

**攻击概述**

MCP隐藏指令攻击是指攻击者通过在 MCP 工具描述中嵌入 ANSI 终端转义码（如颜色设置、光标控制等） 或不可见 Unicode 字符  ，可以使恶意指令对用户不可见，但仍被 LLM  执行。这种攻击方式利用了 MCP 的“行跳跃”漏洞，使得攻击在不被察觉的情况下影响开发者的操作 ，导致数据泄露、供应链攻击等安全问题。

**攻击案例**

案例
描述




案例一
攻击者通过在工具描述中嵌入 ANSI 转义码，使得文本在终端中不可见，但 LLM 仍然读取并执行了其中的指令，导致模型建议从恶意服务器下载 Python 包，从而可能引发供应链攻击。


案例二
通过在用户输入中加入不可见的 Unicode 字符，攻击者可以在 LLM 中注入恶意指令。


案例三
通过在网页中注入隐藏代码，MCP工具返回网页信息给 LLM， 导致注入不可见的恶意指令，实现数据泄露或其他攻击。

**攻击风险**

供应链攻击：通过隐藏的指令，攻击者可以在开发过程中植入恶意代码，影响整个软件供应链。
数据泄露： 敏感信息（如 IP 地址、下载源等）可能被悄无声息地泄露。  
系统安全性：在某些情况下，隐藏指令可以被用来生成和执行恶意代码。

**缓解措施**

缓解方式
描述




输入输出过滤
对用户输入和工具输出进行严格的过滤和清洗特殊字符，移除潜在的恶意字符和指令。


避免将原始工具输出传递到终端
应通过在渲染之前禁用转义序列来对潜在危险的输出进行一致的清理。最简单的方法是将任何十六进制值的字节替换1b为占位符，因为现代终端识别的所有转义序列都以该字节开头。


工具描述审查
对 MCP 工具的描述进行审查，确保其中不包含恶意指令


限制 MCP 服务器权限
在敏感环境中，仅允许信任的 MCP 服务器进行交互，减少潜在的攻击面。


监控和审计 MCP 活动
定期审查日志和交互以检测异常或可疑行为

**参考**

https://blog.trailofbits.com/2025/04/29/deceiving-users-with-ansi-terminal-codes-in-mcp/
https://www.solo.io/blog/deep-dive-mcp-and-a2a-attack-vectors-for-ai-agents

---
