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

MCP 扫描结果干净,服务器却是恶意的:扫描器漏掉了什么

Pluto Security 构造了两个有害的 MCP 服务器,它们各自至少通过了五款扫描器中的一款。干净的扫描结果只是证据,而不是信任决定。

2026-10-11 // 6 分钟 affects: mcp, mcp-scanners, claude-code, cursor, vs-code

What is this?

2026 年 9 月 15 日,Pluto Security 的 Yotam Perkal 和 Eitan Chassid 发表了《Malicious Servers, Clean Scans》。他们构造了两个刻意有害的 Model Context Protocol(MCP)服务器,并用五款 MCP 与技能(skill)扫描器进行检测:Cisco mcp-scanner、Snyk agent-scan、Ventrova sentinel-scan-cli、mcp-shield 和 NVIDIA SkillSpector。每款扫描器在至少一种测试配置下都返回了干净或零发现的结果。

两个服务器都伪装成简单的天气工具,用户仍会收到正常的天气回答。其中一个读取本地凭据文件并发送给收集端;另一个从第二台服务器获取命令、执行并回传输出。测试在隔离环境中使用虚假凭据进行。需要说明:Pluto 销售 MCP 安全产品,文章仅在结尾简略披露了这一点。

另一来源指向相同方向。Murali Ediga 与 Sudipta Chattopadhyay 于 2026 年 9 月 16 日发表的 arXiv 论文指出,七款第三方 MCP 安全工具未能检测出分散在多个通道中的注入载荷。

How it works

这些服务器并没有在元数据里藏什么巧妙手法。工具名称、描述和模式(schema)看起来都无害。有害逻辑位于处理函数(handler)代码中,而许多扫描器从不检查这部分。Pluto 将漏检归因于几类反复出现的缺口:

  • 仅检查元数据。 部分检查只查看名称、描述、模式或清单,而这些内容并无可疑之处。
  • 分析不完整。 Cisco 某个分析器的提示词预算留给服务器证据的空间太少。SkillSpector 的 LLM 审查跳过了一个过大的文件:同样的代码藏在一大段无害文本之后,就返回“CAUTION / 0”且仅部分覆盖。
  • 脆弱的静态规则。 基于关键词或语法的规则可被等价变体绕过。
  • 线索分散。 相关信号被放在不同字段中分别扫描,没有规则将它们关联起来。
  • 运行时才提供的行为。 命令在扫描之后才到达,任何扫描都看不到。
  • 范围之外的内容。 工具调用返回的文本不在工具列表扫描的范围内。

SkillSpector 的默认 LLM 审查是唯一在正常文件大小下发现两个服务器的检查。Cisco 的行为分析器甚至对一个在工具描述中公开说明自己窃取凭据的对照服务器也返回了干净结果。

Why it matters

团队越来越把扫描器的结论当作安装关卡。这项研究表明,一个会悄悄降级的关卡(跳过文件、截断上下文、超时)仍会报告成功。它也与 Trail of Bits 此前关于技能扫描器的发现相呼应:扫描器是固定靶,攻击者后手出招。当 MCP 服务器在开发者机器上拥有 SSH 密钥、云凭据或 Kubernetes 配置的访问权限时,风险最高。

Defenses

  • 核实每次扫描的覆盖范围。 将被跳过的文件、超时或降级分析视为关卡失败,而不是通过。
  • 精选并固定版本。 使用经过审核的来源,固定版本或提交哈希,更新前先审查变更。
  • 审查所有可执行代码,包括运行时加载的代码。
  • 在隔离环境中测试未知服务器,使用虚假凭据,并观察其文件与网络活动。
  • 应用最小权限,限制每个服务器可访问的文件、凭据和网络出口。
  • 安装后持续监控工具定义的变化和进程级行为。
  • 组合多种分析方式,把扫描当作证据,而不是信任决定。

Status

项目详情
研究发布Pluto Security,2026 年 9 月 15 日;arXiv 论文,2026 年 9 月 16 日
测试的扫描器Cisco mcp-scanner、Snyk agent-scan、Ventrova sentinel-scan-cli、mcp-shield、NVIDIA SkillSpector
上游修复两个 SkillSpector 拉取请求已获批准且 CI 通过;两个 Cisco 拉取请求仍待处理。撰文时均未合并或发布
是否在野利用未说明

Sources