セキュリティ研究者らは、AnthropicのModel Context Protocol(MCP)のPython SDKに、深刻度の高い脆弱性が存在することを公表しました。この脆弱性を悪用されると、悪意あるMCPサーバーにOAuth認証情報を盗まれ、ユーザーのアカウントを乗っ取られるおそれがあります。
Cloudsecurity products
影響を受けるのは、HTTPトランスポートを使用するMCPクライアントの環境です。脆弱なSDKはバージョン1.9.1から2.1.1までのリリースが該当します。
Cycodeの調査によると、攻撃者が制御するMCPサーバーはSDKのOAuthディスカバリー処理の弱点を突き、機密性の高いトークン交換データを攻撃者の運用するエンドポイントへ転送させることができます。
漏えいするデータには、OAuthクライアントシークレット、認可コード、PKCEのcode_verifier値が含まれます。これらがあれば、被害者が利用する正規のIDプロバイダーから、正当なアクセストークンを取得できます。
Anthropic MCP Python SDKの脆弱性
MCPクライアントはOAuthディスカバリーを使い、ユーザーがどこで認証し、どこで認可コードをトークンと交換するかを判断します。通常、SDKは認可サーバーを特定してメタデータを取得し、そのメタデータの発行者(issuer)が想定するサーバーの識別情報と一致するかを検証します。
脆弱性が生じるのは、従来型のフォールバック経路です。悪意あるMCPサーバーは、SDKが最新方式の認可サーバーディスカバリーメタデータを要求した際にHTTP 404を返します。するとクライアントは、OAuth設定をMCPサーバーから直接取得せざるを得なくなります。この場合、返されるエンドポイントURLはサーバー側が自由に操作できます。
このフォールバック経路では、認可サーバーのURLがすでに得られている場合にのみ、発行者の検証が行われます。フォールバックではこの値が未設定のままになるため、検証は失敗せずにスキップされてしまいます。
その結果、悪意あるサーバーは、正規のIDプロバイダーを発行者と偽って宣言しながら、攻撃者が制御するトークンエンドポイントを提示できます。
この攻撃が巧妙なのは、認証ページが正規のものに見える点です。悪意あるMCPサーバーは、Google、Okta、Azure AD、その他の企業向けIDプロバイダーの実際のログインページへユーザーを誘導できるため、被害者は通常どおり認証を行います。
ところが、ユーザーが認証を承認すると、SDKは認可コード、クライアントシークレット、PKCEの証明キーを、攻撃者が制御するメタデータで指定されたトークンエンドポイントへ送信してしまいます。
PKCEは、傍受された認可コードの再利用を防ぐための仕組みです。しかしこの攻撃ではコードとベリファイアの両方が奪われるため、保護が回避されます。攻撃者はこれらの情報を本物の認可サーバーに提示し、有効なアクセストークンを入手できます。
有効期間の長いクライアントシークレットやリフレッシュトークンが存在する場合、リスクはさらに高まります。攻撃者は、これらのシークレットがローテーションされるか、トークンが明示的に失効されるまで、アクセスを維持できる可能性があります。その場合、影響を受けたOAuthクライアントに関連するクラウドリソース、社内API、データストア、デプロイパイプラインなどのサービスにアクセスされるおそれがあります。
影響を受けるのは、次のバージョンのHTTPベースのMCPクライアントです。
| SDKブランチ | 脆弱なバージョン | 修正バージョン |
|---|---|---|
| 1.x | 1.9.1–1.29.1 | 1.30.0 |
| 2.x | 2.0.0–2.1.1 | 2.2.0 |
影響を受けるプロバイダーは、OAuthClientProvider、ClientCredentialsOAuthProvider、PrivateKeyJWTOAuthProviderです。特にマシン間通信用のプロバイダーは、ユーザー操作なしで動作するため深刻です。自動化されたAIエージェントやバックエンドのワークフローが、気づかれないまま認証情報を盗まれる危険があります。一方、このSDKで構築されたMCPサーバー、ローカルのstdioクライアント、独自のトークンやヘッダーを指定するクライアントは影響を受けません。
各組織には、MCP Python SDKをバージョン1.30.0または2.2.0以降へ直ちにアップグレードするよう強く推奨されています。修正版では、メタデータを受け入れる前に想定される認可サーバーを検証し、保存された認証情報を認可された発行者に紐付けます。
ClientCredentialsOAuthProviderやPrivateKeyJWTOAuthProviderを使用しているチームは、`issuer=`パラメーターも明示的に設定する必要があります。
あわせて、従来形式で保存されたOAuthクライアント登録を消去してください。脆弱なクライアントが信頼できないMCPサーバーに接続した場合は、クライアントシークレットをローテーションし、発行済みのトークンを失効させる必要があります。パッチを適用するまでの間は、完全に信頼できるMCPサーバーへの接続に限定することが、唯一確実な緩和策です。
SOCのアラート調査を1件あたり21分短縮。即座に得られるIOCのコンテキストで、迅速な対応を実現します。 SOCにTI Lookupを導入する
翻訳元: https://gbhackers.com/anthropic-mcp-python-sdk-flaw/