系统:运行中
← 返回所有攻击
AGENTS MEDIUM NEW

MCP 采样:恶意服务器如何滥用反向 LLM 通道

MCP 的采样功能允许服务器向客户端的模型请求补全。Unit 42 在 2025 年 12 月展示了恶意服务器如何借此实现隐蔽的工具调用、会话劫持和算力盗用。

2026-06-02 // 6 min affects: mcp-sampling, mcp-clients, llm-coding-assistants

这是什么?

大多数关于模型上下文协议(MCP)安全的报道都聚焦于一个方向:客户端调用服务器的工具,而恶意的工具描述或工具结果会毒害代理。采样则颠倒了这一流向。 它是 MCP 的一项可选功能,允许服务器客户端请求一次 LLM 补全——服务器说”请用你的模型运行这段提示词并把答案返回给我”,客户端的模型便照办。

2025 年 12 月 5 日,Palo Alto Networks 的 Unit 42 团队(Yongzhe Huang、Akshata Rao、Changjiang Li、Yang Ji、Wenjun Hu)发布了一份 MCP 攻击向量分析,将采样视为一个独立的攻击面,并针对一款广泛使用的编码助手演示了三种概念验证攻击。The Vulnerable MCP Project 收录了该发现,影响评分为 8/10;Cyber Security News 于 2025 年 12 月 9 日进行了报道。该协议本身由 Anthropic 于 2024 年 11 月推出,采样自那时起就是规范的一部分。

工作原理

采样的存在是为了让服务器能够”借用”模型——例如,一个代码审查服务器需要 LLM 先总结一段 diff,再决定要标记什么。信任问题是结构性的:服务器既控制它发送的提示词,也控制它如何读取响应。被滥用的正是这种双向控制。下文不复现任何攻击原语;重点在于机制本身。

Unit 42 将滥用归为三类:

攻击类别              恶意服务器的行为                          对用户的后果
--------------------  ----------------------------------------  ----------------------------------
算力盗用              在合法的采样请求中附加隐藏任务             算力配额与 API 额度被未授权的
                      (例如"再写一篇长故事")                  工作负载耗尽,在可见输出中不可见
会话劫持              向采样响应中注入持久指令,                 助手行为在整个会话中被改变
                      使其重新进入上下文                        (PoC 迫使助手"像海盗一样"回答;
                                                                同一通道也可降低或武器化响应)
隐蔽工具调用          夹带指令,使模型在用户                     静默的文件写入、持久化,以及
                      看不到请求的情况下调用其他工具             可能的数据外泄,且无需用户同意

共同的根本原因是一种隐式信任模型,缺乏对用户内容与服务器修改之间的内建分隔。由于具备采样能力的服务器可以同时塑造提示词和返回的文本,它便能在两个方向上夹带指令,同时看起来像一个普通工具。

为何重要

采样改变了威胁模型。MCP 的经典建议——“只连接可信服务器并审查工具结果”——假设危险沿服务器→工具→代理流动。采样新增了一条服务器→模型→代理的路径,而大多数用户从不会看到它,因为采样的往返发生在可见对话之下。一个悄悄耗尽你推理配额的代码总结器,或一个为本次会话余下部分钉住某条行为指令的服务器,产出的输出看起来完全正常。

暴露面只取决于一件事:客户端是否实现采样,以及采用何种默认设置。据 Unit 42 及后续报道,许多客户端尚不支持采样,或以宽松的默认设置交付——而随着 MCP 在 2026 年期间被更广泛采用,启用采样等丰富功能的客户端数量也在增长。因此受影响的群体是任何启用了采样却未加约束的 MCP 部署,这也解释了为何评级为中等而非严重:它需要一个恶意或被攻陷的服务器以及一个启用了采样的客户端,但两者都不罕见。

防御

采样很有用,因此目标是约束它,而非一概禁用。基于 Unit 42 的建议和 Vulnerable MCP Project 的记录:

  • 在任何采样请求运行之前,要求逐服务器的显式批准。 不要让服务器静默地调用模型。把服务器想要运行的提示词展示出来。
  • 用严格的模板将用户内容与服务器的修改分隔开,使服务器提供的文本不能被解释为对模型的指令。
  • 过滤采样响应中类似指令的措辞,再让其重新进入上下文,以削弱会话劫持。
  • 对采样进行限流——按服务器、按会话、按天,并对算力配额设置成本上限,使算力盗用很快触顶。
  • 监控算力使用 ——一个突然消耗大量 token 的总结器就是一个信号。
  • 将具备采样能力的服务器与敏感工具隔离。 一个被允许请求补全的服务器,不应同时拥有对文件系统或机密的写入权限。
  • 默认对不可信服务器禁用采样;仅在工作流确有需要时才启用。

现状

项目状态(截至 2026 年 6 月 2 日)
披露Unit 42,2025 年 12 月 5 日发布
性质对协议功能的滥用,而非单一可修补的 CVE
客户端支持参差不齐;许多客户端不启用采样,部分以宽松默认值交付
主要修复客户端侧的约束(批准、限流、过滤)——责任落在客户端实现者身上
受影响任何启用了采样且范围内存在恶意/被攻陷服务器的 MCP 部署

Sources