MCP Registry OIDC 漏洞 CVE-2026-44428 允许攻击者劫持 GitHub
CVE-2026-44428 (CVSS 4.7) 在 MCP Registry 1.7.6 之前的版本中,允许攻击者在注册表实例之间重用被盗的 GitHub OIDC 令牌,使未授权的服务器发布和...

执行摘要
模型上下文协议(MCP)注册表,一个允许MCP客户端发现和安装MCP服务器(类似于这些AI代理组件的应用商店)的目录,在1.7.6版本之前,其GitHub OpenID Connect(OIDC)认证流程中存在一个漏洞。该漏洞被追踪为CVE-2026-44428,CVSS得分为4.7,它允许攻击者获取一个注册表实例的有效GitHub OIDC令牌,并将该令牌重放至另一个实例,因为令牌的受众声明仅绑定到一个全局字符串(mcp-registry),而不是被攻击者针对的特定注册表实例。这种跨实例的令牌重用可能使攻击者能够在受害者的GitHub身份下发布恶意的MCP服务器,对MCP生态系统构成供应链风险。维护者在2026年5月14日发布的1.7.6版本中修复了此问题,通过将OIDC受众绑定到特定注册表实例的标识符。
技术分析
托管在github.com/modelcontextprotocol/registry的MCP注册表提供了一个集中的MCP服务器列表。为了允许通过GitHub Actions自动发布,注册表实现了基于OIDC的认证流程,其中发布者的GitHub Actions工作流从GitHub的OIDC提供者请求一个ID令牌,然后将其呈现给注册表进行验证。
根据注册表维护者发布的咨询,漏洞存在于OIDC受众声明的验证方式。在客户端(GitHub Actions工作流)方面,发布者在从https://token.actions.githubusercontent.com请求ID令牌时总是附加audience=mcp-registry。在服务器端,注册表接受任何其受众与字符串mcp-registry匹配的令牌,而不验证该令牌是否针对其被呈现的特定注册表实例发行。
这意味着,如果攻击者破坏或拦截了为任何MCP注册表实例(包括私有或测试实例)生成的有效ID令牌,他们可以重放该令牌至不同的注册表实例——例如,公共生产注册表registry.mcp.io。令牌的签名和过期时间仍然有效;只有受众绑定的范围不足。
成功重放令牌的攻击者随后可以在目标注册表实例上执行该令牌授权的操作。在MCP注册表的背景下,主要风险是未经授权的服务器发布:攻击者可以在受害者发布者的GitHub身份下提交新的MCP服务器列表,或修改现有列表。由于MCP服务器可以在客户端执行任意代码(它们本质上是MCP主机运行的插件),恶意服务器列表可能会传递恶意软件、外泄数据或对任何安装它的用户执行其他有害操作。
这个漏洞类似于针对OIDC令牌的跨站请求伪造(CSRF),但它在协议级别而不是HTTP级别上运作。维护者指出,攻击需要攻击者首先从某个注册表实例获得一个有效的ID令牌——这是一个非平凡的先决条件,但可以通过破坏CI/CD管道、配置错误的私有注册表或欺骗合法发布者运行恶意工作流的社会工程攻击来实现。
4.7(中等)的CVSS得分反映了相对较高的攻击复杂性和攻击者已经拥有有效令牌的要求。然而,供应链影响——一个单一的恶意服务器可能影响许多下游用户——提升了实际严重性超出数值得分。
缓解措施与建议
所有MCP注册表运营商和用户应立即升级到1.7.6或更高版本。修补后的版本更改了OIDC受众验证,要求一个实例特定的标识符,防止不同注册表实例之间的令牌重用。
对于自托管MCP注册表的组织,维护者建议审查任何在升级前可能已发行的现有OIDC令牌,因为这些令牌在到期前仍然有效。通过使现有工作流运行无效或更新id-token: write权限范围来轮换GitHub Actions OIDC令牌,可以减少暴露窗口。
防御者还应监控其MCP注册表实例中的异常发布活动——特别是,出现在已知发布者身份下但在意外时间或来自意外IP范围创建的服务器列表。由于攻击需要攻击者拥有一个有效的令牌,任何未经授权的发布事件都将表明受害者的CI/CD管道存在更广泛的破坏。
订阅更新
将最新的网络安全资讯直接发送到您的邮箱。

