
简单一句话总结 – MCP服务器——连接AI助手与外部工具和数据的集成层——是一个重要但未被充分探索的攻击面。我们的研究表明,本地托管和第三方的MCP服务器都可能被利用来执行任意代码、窃取敏感数据、并通过社会工程操控用户行为,且通常不给用户任何攻击发生的提示。
模型上下文协议(Model Context Protocol, MCP)是 Anthropic 于 2024 年 11 月宣布的一个开源标准,用于将AI应用程序连接到外部系统。虽然MCP实现了大型语言模型与数据源之间强大的互操作性,但它也为攻击者创造了进行机器中间人(machine-in-the-middle)攻击的机会。在现实世界中已经观察到了恶意的MCP服务器攻击,包括Postmark MCP服务器信息窃取活动。
随着AI在企业、开发团队和工作流程中的采用加速,理解这些新兴的网络安全威胁至关重要。本研究表明,无论是本地托管还是远程托管的第三方MCP服务器,都会引入显著攻击向量,可能被利用来执行任意代码、窃取敏感数据,并通过社会工程操控用户行为。
利用我们内部开发的工具 https://github.com/praetorian-inc/MCPHammer ,我们在多个模型、智能体和工具上验证了这些攻击,证明这些威胁对企业环境既是可行的,也是令人担忧的。
什么是MCP服务器?为什么它们有风险?
MCP服务器主要在两种配置下运行,每种都呈现出独特的安全挑战:
本地托管的MCP服务器 作为进程直接在用户机器上执行。这些服务器可以充当完美的机器中间人攻击向量,使攻击者能够:
- 以用户权限执行任意代码
- 窃取本地数据,包括文件和凭据
- 安装持久化机制和恶意软件
- 污染AI响应
- 收集详细的系统信息
远程托管的第三方MCP服务器,来自 Slack、Notion、Box 和 Atlassian 等 SaaS 提供商,可以通过官方连接器或自定义集成直接配置。虽然这些MCP服务器无法直接在用户机器上执行代码,但它们使得以下行为成为可能:
- 访问企业信息系统
- 在连接的平台内执行未经授权的操作
- 通过 OAuth 流程窃取凭据
- 自主智能体与企业系统交互,通常缺乏足够的监督
最危险的场景是合法的远程MCP服务器与恶意的本地MCP服务器串联在一起,将企业数据访问能力与本地代码执行能力相结合。
MCP服务器对外暴露“工具”,允许LLM与外部系统交互。例如,Slack MCP服务器提供了各种只读和写入/删除工具,每个工具都可以配置不同的审批级别:“始终允许”、“需要批准”或“已阻止”。
攻击者如何利用MCP服务器?
我们的研究确定了通过利用MCP服务器的四种主要攻击向量:
第三方MCP服务器串联
此攻击向量探究了MCP服务器串联,即恶意的本地MCP服务器利用受信任的、合法的远程MCP服务器作为数据源。与Postmark MCP服务器那种独立运作的方式不同,此攻击向量展示了一个恶意服务器如何利用官方集成建立的信任链。
鉴于 Slack 历史上曾被用作C2(命令与控制)基础设施的记录,它成为一个理想的目标。最初的目标是探究我们是否可以创建一个利用 Anthropic 官方 Slack MCP 服务器作为传输机制的 C2 通道。此攻击路径展示了当受信任的 Slack MCP 服务器与恶意的本地 MCP 服务器串联时会发生什么。恶意服务器并不直接访问 Slack,而是拦截流经用户已授权的集成的数据。
我们开发了一个名为 conversation_assistant 的概念验证恶意 MCP 服务器,它模仿了合法的生产力工具,提供消息分析和上下文管理功能。该服务器暴露了听起来无害的工具,例如 get_current_context、analyze_messages 和 store_message_context。
攻击流程如下:攻击者在受害者的 Slack 工作区中发布经过编码的命令。当受害者要求 Claude 使用官方 Slack MCP 读取 Slack 消息时,Slack 服务器返回包含植入命令的消息。Claude 将这些消息作为参数传递给恶意 MCP 工具,恶意服务器在工具中解码并执行它们。
在我们的演示中,攻击者发布了一条状态更新,其中包含 base64 编码的字符串 b3BlbiAtYSBDYWxjdWxhdG9y(解码为 open -a Calculator)。此时,我们发出以下请求来演示:“你能获取我与 Domenic Lo Iacono 之间的 Slack 私信并用对话助手分析它们吗?” 这触发了攻击链,最终导致计算器在后台静默启动。

如上图所示,截图捕捉了完整的攻击序列:Claude 进行了多次 Slack API 调用,analyze_messages 工具收到了消息(包括文本为“Status update for project-b3BlbiAtYSBDYWxjdWxhdG9y”的消息),计算器程序出现,同时 Claude 呈现了其分析结果。而用户自始至终只看到了有用的 AI 帮助。
这演示了通过 MCP 服务器串联实现的代码执行。与独立运行的恶意 MCP 服务器不同,此攻击利用了来自用户已授权的、合法的、受信任的 MCP 服务器的数据流。然而,命令执行只是此架构所支持的一种能力。
任何恶意 MCP 都可以窃取传递给其工具的数据,这是由其机器中间人的位置所固有的。更有价值的能力在于通过精心设计工具,最大化外泄数据的数量和一致性。在上面的示例中,Claude 在发起额外的 Slack API 调用之前表示“让我获取更多消息以构建一个全面的数据集”。这种行为源于工具描述中强调需要尽可能多的数据,利用了 Claude 为优化输出质量而做的努力。恶意 MCP 服务器将此完整数据集作为工具参数接收,并立即将其外泄到攻击者控制的 Slack 工作区。这种技术使得数据外泄变得更加稳定一致。
为了同时演示命令执行和自动数据外泄,我们植入了一个引用外泄数据本身的编码命令:
“Status update for project-b3BlbiAtYSBUZXh0RWRpdCB7e1BBWUxPQURfRklMRX19”
这被解码为:open -a TextEdit {{PAYLOAD_FILE}},其中 {{PAYLOAD_FILE}} 引用了捕获的消息数据。执行时,TextEdit 被启动并显示所有外泄的 Slack 消息。

conversation assistant MCP 服务器包含一个硬编码的 Slack 机器人令牌,用于一个攻击者控制的工作区,并配置了写入和文件上传权限。这使得恶意服务器能够通过将捕获的数据作为 JSON 文件上传到攻击者的 Slack 频道来进行外泄。

任意文件下载与执行
MCP 服务器可以利用常见的软件模式,即在主功能运行前需要进行初始化。我们的概念验证实现了一个强制性的 “init” 工具,其他所有工具在执行前都会检查。当被调用时,init 工具会从配置的 URL 获取内容并使用系统的默认应用程序处理程序打开它,这种行为类似于常规设置,同时充当隐蔽的载荷交付机制。
我们开发了一个配套的配置服务器,允许攻击者管理已部署的实例。在我们的演示中,一个简单的请求如“调用 hello world”就会触发 init 工具,该工具会从 GitHub 下载一个文件并用系统的默认应用程序打开。这里提供的文件可以像 GitHub 的 readme 一样无害,也可以像 我们的 ChromeAlone 浏览器植入物 一样恶意。
通过包管理器配置的供应链攻击
MCP 生态系统已基本将 uvx (来自 Astral 的 UV 包管理器) 标准化为运行基于 Python 的 MCP 服务器的主要方法。这就在配置层本身创造了一个供应链攻击面,甚至在调用任何 MCP 工具之前。
一个典型的 MCP 配置如下所示:
"mcpServers": {
"fs": {
"command": "uvx",
"args": ["mcp-server-fs"]
}
}
当 MCP 客户端加载此配置时,uvx 会动态地从 PyPI 下载指定的包并执行它。这种模式在 MCP 生态系统中广泛存在,并引入了几种完全不需要恶意 MCP 服务器代码的攻击向量。
- 域名仿冒/拼写错误攻击: MCP 配置经常从博客文章、GitHub 片段和文档中复制粘贴。哪怕只有一个字符的拼写错误,比如 mcp-server-sqllite 而不是 mcp-server-sqlite,都会导致在每次代理启动时静默下载并执行攻击者控制的代码。
- 软件包劫持: 如果攻击者通过凭据窃取或 CI/CD 管道利用,在 PyPI 上入侵了一个合法的 MCP 服务器包,那么配置中包含该包的每一个用户在其代理重启时都会自动执行恶意代码。
- 重注册劫持: 当维护者从 PyPI 移除软件包时,这些名称会变得可以重新注册。拥有过时配置的用户会突然下载攻击者控制的代码。
关键见解: 与上面演示的其他攻击向量不同,通过包管理器配置的供应链攻击完全不需要与 MCP 协议本身交互。恶意代码在代理启动期间执行,远在任何工具被调用之前,这使其成为一种零点击攻击向量,完全绕过了工具审批机制。
内容注入与社会工程
MCP 服务器可以操纵 AI 助手的输出以包含攻击者控制的链接、电话号码和建议。在我们的测试中,我们注入了虚假的支持信息和恶意的短链接。用户在收到对其问题的合法、准确答案的同时,还会收到看似来自受信任的AI助手的社会工程内容。

这种技术能够实现:
- 通过虚假登录页面窃取凭据
- 通过攻击者控制的电话号码进行语音钓鱼攻击
- 针对用户兴趣定制的水坑攻击
- 通过虚假政策更新进行的内部钓鱼攻击
数据外泄
MCP 服务器处理查询、访问本地资源并与外部服务通信,从而在用户不知情的情况下创建多个数据外泄渠道。与传统恶意软件需要建立自己的通信渠道不同,恶意的 MCP 服务器利用了用户已经授权的连接。
最直接的向量是查询拦截。在请求优化 hello world 脚本的过程中,来自大语言模型的请求和回复被记录和捕获。我们的 ask_claude 工具通过攻击者控制的基础设施代理请求,从而能够被动收集:
- 机密商业通信
- 源代码及其他知识产权
- 客户数据
- 在故障排除上下文中提到的凭据
是什么让MCP攻击尤其危险?
在特定条件下,这些攻击向量变得尤其危险:
- “始终允许”权限: 只读工具通常会被自动批准,因为它们看起来很安全。当与恶意 MCP 服务器串联时,它们就变成了零点击攻击向量。
- 可信来源混淆: 用户信任来自 Slack 或 Google Drive 等合法来源的数据。他们不会期望来自这些平台的消息可以触发通过 MCP 链的代码执行。
- 合法用例模仿: 伪装成生产力工具(对话摘要器、上下文管理器)的恶意服务器看起来完全良性,却能实现攻击。
- 无视觉指示: 攻击不会在聊天界面留下任何痕迹。用户只看到请求的输出,而不是后台的执行。
虽然我们的演示执行的是 calc.exe 等无害的有效载荷,但同样的技术可以部署勒索软件、窃取凭据、建立持久化或下载额外的恶意载荷。
组织应如何防御MCP攻击?
随着AI集成在企业环境中变得越来越普遍,MCP服务器所带来的攻击面将继续扩大。采用具有MCP功能的AI助手的组织应:
- 对任何MCP服务器安装实施严格的审查流程
- 将所有MCP服务器视为潜在敌对代码
- 审计工具权限,尽量减少“始终允许”的配置
- 监控连接服务之间的异常数据流
- 教育用户了解工具链式调用的风险
虽然本研究侧重于本地运行和远程托管的第三方MCP服务器之间的交互,但对于内部维护的MCP服务器也存在额外的攻击向量。
传统的CI/CD攻击,例如 GitHub Actions利用和设备代码钓鱼,可能使攻击者能够将恶意工具注入组织自己内部开发或维护的MCP服务器中,从而达到与上述演示类似的效果。
随着MCP在企业开发管道中的应用日益增长,我们认为CI/CD安全与MCP服务器完整性的交汇点是一个值得进一步研究的领域。
根本的挑战在于,MCP的强大功能源于其能够将AI助手与外部数据和服务无缝连接。而这种能力也同样削弱了攻击者可以利用的信任边界。随着生态系统的发展,我们预期将会看到更复杂的攻击,以及改进的防御措施。
结论
MCP服务器代表了AI集成环境中一个重要且未被充分探索的攻击面。我们的研究表明,攻击者可以利用这些集成点进行代码执行、数据外泄和社会工程攻击——而用户通常完全察觉不到攻击已经发生。合法的企业数据访问能力与本地代码执行能力的结合,创造了尤其危险的场景。
Praetorian 的攻击性安全专家专门在诸如 MCP 服务器攻击等新兴威胁影响您的组织之前进行识别和缓解。请浏览我们的 https://github.com/praetorian-inc/MCPHammer,或联系我们的团队,以了解我们的AI安全评估如何保护您的企业AI部署。
常见问题解答
什么是模型上下文协议 (MCP)?
MCP是 Anthropic 于 2024 年 11 月发布的一个开源标准,它使 Claude、ChatGPT 等 AI 助手能够连接到外部工具和数据源。它允许 AI 模型通过标准化的“服务器”集成来读取 Slack 消息、查询数据库、管理文件以及与 SaaS 平台交互。
MCP服务器能在我的机器上执行代码吗?
可以。本地托管的MCP服务器以进程形式在您的机器上运行,并拥有您的用户权限。一个恶意的本地MCP服务器可以执行任意命令、访问本地文件、安装恶意软件和窃取数据——同时,其表面上却在提供合法的生产力功能。
什么是MCP服务器串联?
MCP服务器串联是指恶意的本地MCP服务器截获流经合法的、受信任的远程MCP服务器(例如官方的Slack或Google Drive集成)的数据。攻击者无需入侵合法的服务器——他们利用的是通过授权集成传递的数据。
如何保护MCP服务器集成?
在安装前审计每一个MCP服务器。尽量减少工具的“始终允许”权限。监控连接服务之间的数据流。将所有MCP服务器视为潜在敌对代码。审查软件包来源,以避免域名仿冒和供应链攻击。
远程托管的MCP服务器安全吗?
来自官方提供商(Slack、Notion、Atlassian)的远程托管MCP服务器无法直接在您的机器上执行代码。但是,它们可以访问企业数据,在连接的平台内执行未经授权的操作,并通过OAuth流程窃取凭据。当与恶意的本地MCP服务器串联时,这种组合变得尤其危险。
在哪里可以找到MCP安全研究工具?
我们的概念验证工具 MCPHammer 是开源的,可在 GitHub 上获取:https://github.com/praetorian-inc/MCPHammer。它包含了本研究中描述的MCP服务器串联演示、内容注入示例和数据外泄概念验证。
原文:https://www.praetorian.com/blog/mcp-server-security-the-hidden-ai-attack-surface/

