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

远程 MCP 服务器:40% 无身份验证,其余的 OAuth 也已失守

2026 年 5 月的一篇 arXiv 研究扫描了 7,973 台活跃的远程 MCP 服务器:40.55% 在毫无身份验证的情况下暴露工具,而受测的 119 台 OAuth 服务器无一例外至少存在一个缺陷——已分配 9 个 CVE。

2026-06-08 // 6 分钟 affects: remote-mcp-servers, model-context-protocol, oauth-2.1

What is this?

2026 年 5 月的一篇 arXiv 论文 A First Measurement Study on Authentication Security in Real-World Remote MCP Serverscs.CR, 2605.22333)首次对远程 Model Context Protocol 服务器的身份验证层进行了大规模测量——这些可通过网络访问的程序向 LLM 智能体暴露各类工具(数据库查询、API 调用、文件访问)。此前的研究大多关注提示注入与工具投毒;本文针对的是协议层的问题:究竟谁被允许连接

核心测量结果直截了当。在 7,973 台经验证的活跃远程 MCP 服务器中,3,233 台(40.55%)在完全没有任何身份验证的情况下暴露其工具接口——任何客户端无需出示凭据即可调用工具或触发 API 请求。其余服务器中,OAuth 是主流机制(2,428 台)。当作者手动测试一个完全可复现的 119 台 OAuth 服务器子集时,每一台都至少存在一个身份验证缺陷——总计 325 个缺陷。其中九个严重到在负责任披露后获得了 CVE 编号(CVE-2026-26384 至 CVE-2026-26390 系列)。这一发现补充了 VIPER-MCP 代码质量扫描更大范围的暴露统计:这些服务器不仅存在漏洞、过度暴露,其前门往往还是敞开的。

How it works

MCP 规范在 2025 年 3 月 26 日的修订中将带 PKCE 的 OAuth 2.1 设为 HTTP 传输的强制要求,而 2025 年 11 月 25 日的版本则优先采用 Client ID Metadata Documents,同时保留动态客户端注册(DCR)作为向后兼容的回退手段。实际上,远程服务器依赖 DCR,因为它们必须接受异构客户端——IDE、CLI、桌面应用、云端智能体——这些客户端无法手动逐一预注册。论文提炼出这些部署的三个反复出现的特征,并据此构建了一个涵盖四类、九种缺陷类型的分类法。以下从机制层面而非 payload 层面描述:

Category                          Representative flaw            Effect
--------------------------------  ----------------------------  ---------------------------
C1 Dynamic Client Registration    Malicious DCR binding         Anonymous registrant submits
   (96.6% of tested servers)      (F1, 95.8%)                   an attacker redirect_uri and
                                                                gets a valid client_id back.
C3 Open Client Environment        PKCE downgrade (F5, 68.1%)    Server accepts a missing or
   (85.7% of tested servers)                                    "plain" code_challenge,
                                                                nullifying PKCE binding.
C2 Delegated Authorization        Layer inconsistency (F3)      PKCE enforced on the first
   (15.1% of tested servers)      Nested context pollution (F4) hop but dropped on the
                                                                upstream hop; unvalidated
                                                                redirect_uri inside `state`.
C4 Common OAuth misconfig         Standard OAuth hygiene gaps   Reuse/replay of codes, weak
                                                                state/CSRF handling.

最主要的失效也最简单:DCR 端点接受未经身份验证的注册者提交的任意 redirect_uri。攻击者注册一个指向自己所控服务器的客户端,用该回调地址构造一个授权 URL,再通过社会工程诱导受害者完成同意流程。授权码随即被发送到攻击者手中,攻击者用它换取访问令牌,从而接管受害者的 MCP 会话——并通过委托授权进一步接管其背后的上游服务账户。如果服务器允许省略 PKCE,那么仅窃取授权码就已足够。整个过程无需任何恶意的 MCP 客户端;攻击者只需向公开端点发送 HTTP 请求并托管一个网页。此处不复现任何可用的攻击代码——权威参考是论文及已分配的 CVE 记录。

Why it matters

远程 MCP 正在成为连接智能体与真实系统的纽带,这使其身份验证层成为关键承重结构。两个发现应当改变团队对待它的方式。其一,40% 无身份验证是一种可被直接利用的暴露,而非理论风险:这些服务器把工具执行权交给任何能够触达它们的人,而据 Adversa 2026 年 6 月综述,Censys 在公网上统计到 12,520 个此类服务。其二,存在身份验证并不等于身份验证正确——作者所能测试的每一台 OAuth 服务器都存在缺陷,而最常见的缺陷(开放式 DCR 绑定)会直接导致账户接管。由于 MCP 服务器往往同时充当面向 MCP 客户端的 OAuth 资源服务器,以及面向上游服务的 OAuth 客户端,任何一个环节失守都会演变为跨越多个独立运营平台的”混淆代理人”(confused deputy)问题。

Defenses

这些修复都是 MCP 服务器代码经常忽略的标准 OAuth 卫生措施。

  1. **锁定动态客户端注册。**不要接受匿名注册者提交的任意 redirect_uri。对精确的回调地址采用白名单,要求注册端点进行身份验证,并优先采用 Client ID Metadata Documents(2025 年 11 月 25 日规范的首选机制)而非开放式 DCR。

  2. **强制 PKCE,拒绝降级。**要求 S256;拒绝省略 code_challenge 或使用 plain 方法的请求。在无法保护 client_secret 的开放客户端环境中,PKCE 是主要的绑定手段。

  3. **以精确匹配校验重定向 URI 并绑定整个流程。**保持授权码一次性使用、短期有效,并绑定到同一客户端与 PKCE 验证器;保留 state 以防 CSRF;对嵌入 state 中的任何 URI 做完整性保护。

  4. **在委托跳转中保持 PKCE 一致。**若第一跳强制 PKCE,上游请求也必须如此——层级不一致会悄无声息地使该保障失效。

  5. **对每一台远程服务器进行身份验证,并下线其余服务器。**影响最大的举措:在每一台远程 MCP 服务器前放置身份验证,并把未经验证的服务器从公网上撤下。配合经认证的工具服务器准入以及 NSA 的 MCP 安全设计考量作为基线。

Status

项目参考日期说明
测量研究arXiv:2605.22333 (cs.CR)2026-05首个远程 MCP 服务器身份验证研究
暴露情况论文2026-057,973 台活跃服务器;3,233 台(40.55%)无身份验证
OAuth 缺陷论文2026-05119 台可测服务器全部存在缺陷;共 325 个缺陷
最主要缺陷论文2026-0595.8% 存在开放式 DCR 绑定 → 授权码窃取
披露论文2026-05负责任披露;已分配 9 个 CVE(CVE-2026-26384–26390)
生态背景Adversa / Censys 综述2026-06-04公网暴露 12,520 个 MCP 服务

正确的解读不是”OAuth 已经失效”,而是远程 MCP 服务器在部署压力下重新实现 OAuth,却在最难的部分出了错,与此同时相当一部分服务器干脆完全跳过身份验证。请像对待任何其他公开 OAuth 面一样对待你的 MCP 身份验证层:锁定注册、强制 PKCE,并在一切能够执行工具的入口前放置凭据。

Sources