# MCP 盲点：当文档可以让您的 AI 代理采取行动时

> Anthropic 的模型上下文协议允许人工智能代理调用本地工具。真实的、经过演示的攻击展示了不受信任的内容如何劫持该访问。需要采取什么措施来防御它。

HisnLabs Security & Research Team · Published 2026-09-25
Canonical: https://hisnlabs.com/zh/blog/mcp-blind-spot-local-tool-servers-prompt-driven-execution

Anthropic 于 2024 年 11 月 25 日推出了模型上下文协议 (MCP)，名称为 [“一种开放标准，使开发人员能够在数据源和人工智能工具之间建立安全的双向连接”](https://www.anthropic.com/news/model-context-protocol)。在实践中，MCP 让 AI 助手调用本地程序（称为 MCP 服务器），代表其读取文件、查询数据库或访问网络。这确实有用，而且它也是一种新的攻击面：模型根据它读取的文本决定调用哪个工具，并且它不能总是区分你的指令和其他人的指令。

## MCP 服务器实际如何运行

MCP 规范定义了两种传输方式。通过 `stdio`，“客户端将 MCP 服务器作为子进程启动”，两者通过标准输入和输出进行对话。通过 Streamable HTTP（取代了 2024 年 11 月规范中的原始 HTTP+SSE 传输），服务器作为自己的本地进程运行，客户端向其发送 HTTP 请求，可选择接收返回的服务器发送事件流 ([MCP 规范、传输](https://modelcontextprotocol.io/specification/2025-06-18/basic/transports))。无论哪种方式，本地 MCP 服务器通常都以与启动它的人相同的文件和网络权限运行，因为协议中没有其他要求。

该规范本身直接标记了 HTTP 变体的风险：它要求服务器验证 `Origin` 标头，建议在本地运行时绑定到 `127.0.0.1` 而不是 `0.0.0.0`，并要求在每个连接上进行身份验证，并警告说，如果没有这些，“攻击者可以使用 DNS 重新绑定从远程网站与本地 MCP 服务器进行交互。”

## 机制：混乱的副手

这种故障模式的经典名称是[困惑的副手问题](https://en.wikipedia.org/wiki/Confused_deputy_problem)：“一个计算机程序被另一个程序（具有较少特权或较少权限）欺骗而滥用其权限。”具有 MCP 工具访问权限的 AI 代理是具有真正权限的代理人 - 读取您的文件，发出网络请求 - 根据来自仅要求其汇总或分析的内容的指令进行操作。当该内容包含其自己的说明时，代理可以遵循这些说明而不是您的说明，或者除了您的说明之外还遵循这些说明。这就是 OWASP 的 LLM 申请类风险前 10 名所称的提示注入和过度代理：[OWASP：LLM 申请前 10 名](https://owasp.org/www-project-top-10-for-large-language-model-applications/)； [OWASP LLM01:2025，即时注入](https://genai.owasp.org/llmrisk/llm01-prompt-injection/)。

## 演示案例：GitHub MCP 服务器

这不是理论上的。 2025 年 5 月 26 日，[不变实验室报告](https://invariantlabs.ai/blog/mcp-github-vulnerability) 针对官方 GitHub MCP 服务器进行了概念验证，该服务器当时拥有大约 14,000 个 GitHub star。他们的设置是：要求一名能够访问公共和私人存储库的代理来审查公共存储库上的未决问题。公共存储库中精心设计的问题包含隐藏的指令；代理将其作为正常任务的一部分来读取，然后跟踪它们，并在演示中继续向攻击者控制的问题线程公开私有存储库详细信息，包括研究人员描述为个人的信息。 Invariant Labs 明确表示，这是在测试存储库上进行的概念验证，而不是在野外观察到的攻击，并且“这不是 GitHub MCP 服务器代码本身的缺陷，而是必须在代理系统级别解决的基本架构问题。”演示中使用的模型是 Claude 4 Opus。

> **Note:** 教训并不是这台服务器有缺陷。任何结合三个属性的 MCP 服务器都会创建相同的开口。

## 致命的三重奏

2025 年 6 月 16 日，西蒙·威利森 (Simon Willison) 将此类案例背后的模式命名为 [“致命三连胜”](https://simonwillison.net/2025/Jun/16/the-lethal-trifecta/)：一个代理拥有 (1) 访问私人数据的权限，(2) 接触不受信任的内容，以及 (3) 一种外部通信方式。 “如果你的代理结合了这三个功能，攻击者就可以轻松欺骗它访问你的私人数据并将其发送给攻击者。”他特别将 MCP 称为贡献者：“模型上下文协议（MCP）的问题在于，它鼓励用户混合和匹配来自不同来源的工具，这些工具可以做不同的事情”，这使得很容易最终在一个会话中激活所有三个属性而不做决定。

## 为什么端点工具很难看到这一点

从操作系统的角度来看，GitHub MCP 案例中没有发生任何异常情况：经过签名的可信应用程序读取一些文本，并通过配置为使用的本地帮助程序进程发出网络请求。没有要标记的恶意二进制文件，也没有利用内存安全漏洞。重要的请求（执行数据的请求）与代理每天正确调用一百次的任何其他工具的形状相同。

## 真正降低风险的是什么

- 为每个 MCP 服务器提供其所需的最窄的工具和文件范围，而不是广泛的文件系统或 shell 访问权限，因此被劫持的工具调用的作用较小。
- 将代理从您控制之外读取的任何内容（问题、网页、下载的文件）视为不受信任的输入，这与您应用于任何其他系统中的用户输入的规则相同。
- 遵循 MCP 规范本身提供的传输级指导：将本地服务器绑定到本地主机、要求身份验证、验证 Origin 标头。
- 监视或控制此攻击的每个版本都共享的一个步骤：将数据传送给攻击者的出站连接。这一步发生在模型已经被愚弄之后，这就是为什么它是捕获它的最可靠的地方。

## FireAI 和 HisnLabs 在其中扮演的角色

The step an injected agent cannot skip is the outbound connection that carries your data out, which is exactly what a per-app firewall like FireAI is built to see and stop, whether the process asking to connect is a familiar app or an MCP server it has never seen before.

FireAI 是 HisnLabs 自己的产品：一款直接在 Mac 上运行的 AI 防火墙。它用通俗易懂的语言显示你的应用建立的每一个连接，并让你决定哪些数据可以离开你的 Mac——它的 AI 在本地运行，因此你的流量永远不会发送给我们或任何其他人。HisnLabs 的安全研究团队负责让这些判断保持准确：归类哪些域名只是普通的遥测、哪些属于真正的服务，追踪连接背后的国家和网络，并用真实的流量模式训练设备端模型（FireAI Pilot 功能）——这一切都不会离开你的 Mac。

你可以阅读它背后的技术决策，或试用 FireAI 17 天：[HisnLabs 出品的 FireAI](https://hisnlabs.com/fireai/zh/download)。

## Sources

- [Anthropic: Introducing the Model Context Protocol](https://www.anthropic.com/news/model-context-protocol)
- [MCP specification: Transports (2025-06-18)](https://modelcontextprotocol.io/specification/2025-06-18/basic/transports)
- [Simon Willison: The Lethal Trifecta for AI agents](https://simonwillison.net/2025/Jun/16/the-lethal-trifecta/)
- [Invariant Labs: MCP Security Notification — GitHub MCP](https://invariantlabs.ai/blog/mcp-github-vulnerability)
- [Wikipedia: Confused deputy problem](https://en.wikipedia.org/wiki/Confused_deputy_problem)
- [OWASP: Top 10 for Large Language Model Applications](https://owasp.org/www-project-top-10-for-large-language-model-applications/)
- [OWASP Gen AI Security Project: LLM01:2025 Prompt Injection](https://genai.owasp.org/llmrisk/llm01-prompt-injection/)
