远程 MCP 服务器:40% 无身份验证,其余的 OAuth 也已失守
2026 年 5 月的一篇 arXiv 研究扫描了 7,973 台活跃的远程 MCP 服务器:40.55% 在毫无身份验证的情况下暴露工具,而受测的 119 台 OAuth 服务器无一例外至少存在一个缺陷——已分配 9 个 CVE。
What is this?
2026 年 5 月的一篇 arXiv 论文 A First Measurement Study on Authentication Security in Real-World Remote MCP Servers(cs.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 卫生措施。
-
**锁定动态客户端注册。**不要接受匿名注册者提交的任意
redirect_uri。对精确的回调地址采用白名单,要求注册端点进行身份验证,并优先采用 Client ID Metadata Documents(2025 年 11 月 25 日规范的首选机制)而非开放式 DCR。 -
**强制 PKCE,拒绝降级。**要求
S256;拒绝省略code_challenge或使用plain方法的请求。在无法保护client_secret的开放客户端环境中,PKCE 是主要的绑定手段。 -
**以精确匹配校验重定向 URI 并绑定整个流程。**保持授权码一次性使用、短期有效,并绑定到同一客户端与 PKCE 验证器;保留
state以防 CSRF;对嵌入state中的任何 URI 做完整性保护。 -
**在委托跳转中保持 PKCE 一致。**若第一跳强制 PKCE,上游请求也必须如此——层级不一致会悄无声息地使该保障失效。
-
**对每一台远程服务器进行身份验证,并下线其余服务器。**影响最大的举措:在每一台远程 MCP 服务器前放置身份验证,并把未经验证的服务器从公网上撤下。配合经认证的工具服务器准入以及 NSA 的 MCP 安全设计考量作为基线。
Status
| 项目 | 参考 | 日期 | 说明 |
|---|---|---|---|
| 测量研究 | arXiv:2605.22333 (cs.CR) | 2026-05 | 首个远程 MCP 服务器身份验证研究 |
| 暴露情况 | 论文 | 2026-05 | 7,973 台活跃服务器;3,233 台(40.55%)无身份验证 |
| OAuth 缺陷 | 论文 | 2026-05 | 119 台可测服务器全部存在缺陷;共 325 个缺陷 |
| 最主要缺陷 | 论文 | 2026-05 | 95.8% 存在开放式 DCR 绑定 → 授权码窃取 |
| 披露 | 论文 | 2026-05 | 负责任披露;已分配 9 个 CVE(CVE-2026-26384–26390) |
| 生态背景 | Adversa / Censys 综述 | 2026-06-04 | 公网暴露 12,520 个 MCP 服务 |
正确的解读不是”OAuth 已经失效”,而是远程 MCP 服务器在部署压力下重新实现 OAuth,却在最难的部分出了错,与此同时相当一部分服务器干脆完全跳过身份验证。请像对待任何其他公开 OAuth 面一样对待你的 MCP 身份验证层:锁定注册、强制 PKCE,并在一切能够执行工具的入口前放置凭据。