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

DNS 重绑定让本地 MCP 服务器变成远程攻击面

2025–2026 年的一波协同披露击中了所有主流 MCP SDK,根因相同:监听 localhost 的 HTTP 服务器未校验 Host/Origin 头。最新的 CVE-2026-11624(Google MCP Toolbox,2026 年 6 月 13 日)被评为严重级 9.4。

2026-06-15 // 6 min affects: mcp-typescript-sdk, mcp-python-sdk, mcp-java-sdk, mcp-rust-sdk, mcp-go-sdk, google-mcp-toolbox

这是什么?

大约七个月间,几乎所有官方 Model Context Protocol(MCP)SDK 以及多个基于它们构建的 MCP 服务器,都被披露存在同一类漏洞。每一次的根因都相同:一个基于 HTTP、监听 localhost 的 MCP 服务器未校验传入的 Host(或 Origin)头,因而暴露于 DNS 重绑定(DNS rebinding) 攻击之下。MCP 规范其实早有提示——其传输层安全警告写明:“服务器必须(MUST)校验所有传入连接的 Origin 头,以防止 DNS 重绑定攻击”MCP 规范,2025-06-18)——但各 SDK 默认并未强制执行。

这些披露大多归功于研究员 Jonathan Leitschuh,覆盖 TypeScript SDK(CVE-2025-66414,2025 年 12 月 2 日)、Java SDK(CVE-2026-35568,2026 年 4 月 7 日)、Rust 的 rmcp crate(CVE-2026-42559,2026 年 4 月 29 日),以及 Python 与 Go SDK。最新一例——Google MCP Toolbox for Databases 中的 CVE-2026-11624,于 2026 年 6 月 13 日 公布,评级为 CVSS 4.0 9.4(严重)——表明该模式仍在生产工具中不断浮现(CIRCL Vulnerability-Lookup)。

工作原理

DNS 重绑定是一种古老的浏览器—网络攻击,在此被重新用于针对智能体技术栈。其机制已被充分记录,无需任何新颖的漏洞利用:

  1. 开发者以 Streamable HTTP 或 SSE 方式,将 MCP 服务器绑定到 localhost(本地智能体工具中很常见),通常不带身份认证。
  2. 受害者访问一个由攻击者控制的网页。攻击者的域名先解析到其自有服务器,随后被重绑定127.0.0.1(一次极短 TTL 的切换)。
  3. 受害者的浏览器仍将该页面视为攻击者主机名的”同源”,于是向本地 MCP 服务器发送请求。如果服务器只检查请求是否到达,却不检查浏览器自以为在与哪个主机名通信,它就会作出响应。

由于浏览器无法伪造发往被重绑定地址的真实 Host 头,因此校验该头(对照如 localhost127.0.0.1::1 的允许列表)正是阻断攻击的关键。略过此项检查的服务器,会让远程网页得以枚举并调用任何已暴露的工具。被滥用请求的概念形态:

# 浏览器被诱导跨源发送的请求(数值仅作示意)
POST /mcp HTTP/1.1
Host: attacker-rebound.example        # 易受攻击的服务器从不校验
Content-Type: application/json
{ "method": "tools/call", "params": { "name": "[REDACTED_TOOL]", ... } }

根据 Rust 公告,影响范围很大:攻击者可”枚举并调用任何工具”,读取资源与提示词,并”触发副作用(文件写入、shell 执行、API 调用)“——因此对于暴露文件系统、shell 或浏览器控制类工具的服务器,这可升级为在开发者机器上执行任意代码

为何重要

MCP 服务器正悄然成为智能体部署中权限最高的组件:它们以用户权限运行,并居中代理对真实工具的访问。“仅 localhost”的绑定看似安全,而这恰恰是该类漏洞危险之处——面对受害者本就在运行的浏览器,回环接口并不是安全边界。开发者笔记本上任何未认证的 HTTP MCP 服务器,都可被其打开的任意网站触达。

广度才是重点。这并非单一厂商的失误,而是一道在整个生态中被复制的规范与实现的鸿沟:规范说 MUST,SDK 却交付了不安全的默认值(TypeScript 漏洞归类为 CWE-1188,不安全的默认初始化),下游服务器又继承了这一缺陷。从 2025 年 12 月到 2026 年 6 月 13 日 Google Toolbox 的严重级 CVE,这种持续不断的节奏表明,更多带有该模式的 MCP 服务器仍未在野外修补。需要注意:stdio 传输受影响——仅 HTTP/SSE 服务器受影响。

防御

升级到已修复的 SDK 版本。 TypeScript @modelcontextprotocol/sdk ≥ 1.24.0、Java mcp-core ≥ 1.0.0、Rust rmcp ≥ 1.4.0(当前 1.5.1),以及 Python/Go 的修复版本。对 Google MCP Toolbox,升级到 ≥ 0.25.0,它新增了 --allowed-hosts/--allowed-origins 选项(注意:两者默认仍为 *,仅在启动时给出警告,请显式设置)。

强制 Host/Origin 允许列表。 修复会将 Host 头对照回环允许列表(localhost127.0.0.1::1)校验,不匹配则返回 HTTP 403;TypeScript SDK 提供 hostHeaderValidation() 中间件。请开启它,不要依赖旧版本的默认值。

在前面放置反向代理。 若无法升级,可将服务器置于 nginx、Caddy 或 HAProxy 之后,配置为拒绝 Host/Origin 非预期值的任何请求。已强制严格 CORS/Origin 校验的框架(例如 Spring AI)并不受影响。

增加身份认证并避免 0.0.0.0 不要在共享接口上运行未认证的 HTTP MCP 服务器。仅绑定回环、要求令牌,纯本地工具优先使用 stdio

审计你的工具能做什么。 在证明安全之前,应把每个本地暴露的 MCP 工具都视为可从浏览器触达,并在任何经 HTTP 暴露的服务器上尽量减少高影响工具(shell、无限制文件系统)。

状态

组件标识披露日期修复版本严重程度
Google MCP Toolbox for DatabasesCVE-2026-116242026-06-130.25.0CVSS 4.0 9.4(严重)
Rust SDK(rmcpCVE-2026-425592026-04-291.4.0CVSS 3.1 8.8(高)
Java SDK(mcp-coreCVE-2026-355682026-04-071.0.0CVSS 4.0 7.6(高)
TypeScript SDKCVE-2025-664142025-12-021.24.0CVSS 4.0 7.6(高)
Python / Go SDKGHSA-9h52-p55h-vw2f / GHSA-xw59-hvm2-8pj62025–2026已修复
共同弱点CWE-346(Origin 校验错误)/ CWE-1188
不受影响stdio 传输;严格 CORS 框架(例如 Spring AI)

Sources