MCP Python SDK OAuth Flaw Lets Malicious Servers Hijack AI Agent Accounts
2026/09/30 CyberSecurityNews — 公式の Model Context Protocol (MCP) Python SDK に存在する深刻度の高い脆弱性を悪用すると、攻撃者は悪意の MCP サーバを介して OAuth 認証情報を窃取し、AI エージェントのアカウントを乗っ取る可能性がある。この問題は、OAuth を使用して Google/Okta/Microsoft Entra ID などの正規の ID プロバイダーにアクセスする脆弱な HTTP ベースの MCP クライアントが、信頼できないサーバに接続する際に影響を受ける。

MCP とは、AI アシスタント/エージェントを外部ツール/API/データソースに接続するためのオープンプロトコルであり、クライアントで認証が必要になると、OAuth の検出処理を通じて認証を担う認可サーバを特定する。しかし、脆弱な SDK は MCP サーバから提供されるデータを過度に信頼し、機密性の高い OAuth 認証処理を攻撃者が制御するサーバへ転送する可能性がある。
MCP Python SDK の OAuth 脆弱性
この攻撃は、悪意の MCP サーバが新しい認可サーバ検出リクエストに対して 404 応答を返すことで、SDK に旧来のフォールバック処理を使用させ、MCP サーバから直接送信された OAuth 設定を受け入れさせるものだ。しかし SDK は、指定された OAuth の発行者情報と想定されるログイン・プロバイダーとの一致を検証していない。
この検証の不備を悪用する攻撃者は、ブラウザには被害者が利用する正規の ID プロバイダーのログインページを表示する一方で、OAuth トークンエンドポイントには悪意のサーバを指定する設定を提供できる。
正規の Google/Okta/Microsoft Entra ID のドメイン上にある通常のサインイン・ページが表示されるため、認証処理は正規の手続きであるかのように見える。そのため、偽装された認証処理が成功すると、影響を受ける SDK は認可コード/クライアントシークレット/PKCE コード検証値を攻撃者のトークンエンドポイントへ送信する可能性がある。
PKCE (Proof Key for Code Exchange) は、認可コードの不正利用を防ぐための仕組みである。しかし、この欠陥を突く悪意のサーバは、認可コードと PKCE コード検証値の両方を受け取るため、正規の ID プロバイダーとの間で認可コードを交換し、被害者のアカウントに対する有効なアクセストークンを取得できる。
Cycode によると、この脆弱性では、SDK が保存済みの認証情報を検証する際に、悪意の MCP サーバが制御できる発行者情報を使用するため、認証情報の紐付けを保護する仕組みも不十分である。この不備により、正規の認可サーバを装う攻撃者は、SDK に正規の認証情報を再利用させ、攻撃者が制御するエンドポイントへ送信させることが可能になる。
影響を受けるバージョンは、MCP Python SDK 1.x 系の 1.9.1〜1.29.1、および 2.x 系の 2.0.0〜2.1.1 であり、対象となる OAuth プロバイダーは OAuthClientProvider/ClientCredentialsOAuthProvider/PrivateKeyJWTOAuthProvider である。また、非推奨の RFC7523OAuthClientProvider についても、古い導入環境では影響を受ける可能性がある。
深刻度は、ユーザー操作を必要とする対話型 OAuth プロバイダーでは 6.5 と評価されているが、本物のログインページが表示されるため、攻撃の成立を妨げる要因は小さく、ユーザー操作を必要としないマシン間認証のプロバイダーでは 7.5 (High) と評価されている。
AI エージェント環境では、モデルが MCP サーバを自律的に選択する場合、侵害されたレジストリ/タイポスクワッティング/プロンプト・インジェクション/DNS ハイジャック/ネットワーク侵害などを通じて、不正なサーバへリダイレクトされるリスクがある。
対策として推奨されるのは、開発者は MCP Python SDK を 1.x 系では 1.30.0 へ、2.x 系では 2.2.0 へアップグレードすることである。修正版では、各検出経路で認可サーバの発行者情報を検証し、想定外のプロバイダーから送られたメタデータを拒否する。また、ClientCredentialsOAuthProvider/PrivateKeyJWTOAuthProvider を使用する組織は、issuer= パラメータで想定する発行者を明示的に設定する必要がある。
さらに、パッチ適用前にアプリケーションが信頼できない MCP サーバへ接続した可能性がある場合は、古い OAuth 登録の削除/漏えいした可能性のあるクライアントシークレットの更新/トークンの失効などが必要となる。なお、SDK を使用して構築された MCP サーバ/ローカルの stdio クライアント/独自のトークンまたはヘッダーを提供するクライアントは、この脆弱性の影響を受けない。
この問題の背景には、MCP Python SDK における OAuth 認証情報の検証不備があります。外部連携を担う仕組みにおいて接続先の識別検証が不十分な場合、偽装された応答によって認証処理が攻撃者制御のエンドポイントへ転送されるおそれがあります。これによりアクセス権限の奪取や不正利用といった被害へつながるリスクが存在します。影響を低減するための対応策として、適切な修正バージョン ( 1.x 系は 1.30.0 以降/ 2.x 系は 2.2.0 以降 ) へのアップデート/発行者情報の明示的設定/古い認証情報の失効や再発行処理の実施が推奨されます。
You must be logged in to post a comment.