事件经过
在官方 MCP TypeScript SDK 中,OAuth 客户端让客户端连接的 MCP 服务器决定哪个授权服务器接收客户端的 OAuth 凭据;存储/预置的凭据未绑定到它们所属的授权服务器(CWE-345/CWE-522)。恶意或受感染的 MCP 服务器可以在受保护资源元数据中指定自己的授权服务器,并且无需用户交互即可接收受害者的已保存 `refresh_token` 和 `client_secret`(1.x)或捆绑的非交互式提供程序的已配置 `client_secret`/签名断言(1.x 和 2.x)。已在 SDK 1.31.0 和 @modelcontextprotocol/client 2.2.0 中修复。
影响分析
这是 Model Context Protocol 的参考 SDK——代理式 AI 的连接组织。由于它是可自动化的(无 UI、无用户确认),任何持有合法提供商 OAuth 凭据并连接到不受信任或受感染 MCP 服务器的代理都会静默交出长期令牌,从而在整个代理堆栈中实现账户/API 接管。可信签发者绑定缺口是生态系统核心客户端库中的结构性 OAuth 集成缺陷。
攻击途径
代理连接到攻击者控制/受感染的 MCP 服务器;服务器在资源元数据中通告自己的授权服务器;SDK 在下次令牌刷新时将存储的 refresh_token + client_secret 发送到该端点。
受影响系统
@modelcontextprotocol/sdk >= 1.12.0,< 1.31.0(1.x);@modelcontextprotocol/client >= 2.0.0,< 2.2.0(2.x)
缓解措施
升级到 @modelcontextprotocol/sdk 1.31.0 或 @modelcontextprotocol/client 2.2.0;在 1.x 上仅将启用 OAuth 的客户端连接到受信任的 MCP 服务器(变通方法)。