MCP Python SDKの重大な脆弱性により、OAuth認証情報が悪意あるサーバーに漏洩
公式のMCP Python SDKにある脆弱性により、悪意あるサーバーが影響を受けるクライアントからクライアントシークレットやPKCEキーなどのOAuth認証情報を窃取できる可能性があります。
英語の原文から自動翻訳されました。
公式のModel Context Protocol (MCP) Python SDKに重大なセキュリティ脆弱性が存在し、悪意あるMCPサーバーが接続中のクライアントからOAuth認証情報を窃取できるようになっています。2026年9月28日に公開されたこの欠陥は、バージョン1.9.1~1.29.1および2.0.0~2.1.1に影響し、攻撃者がクライアントシークレット、認可コード、PKCEプルーフキーをインターセプトすることを可能にします。
何が起きたのか
MCP Python SDKのメンテナーは、Cycodeの研究チームが悪意あるサーバーがアプリケーションを騙して機密性の高い認証データを渡させる方法を実証した後、セキュリティアドバイザリを発行しました。MCPクライアントがログインを試みる際、接続先のサーバーに対して認可サーバーの場所を尋ねます。影響を受けるバージョンでは、SDKがこの応答を厳格に検証していませんでした。
悪意あるサーバーは、クライアントを攻撃者が制御するエンドポイントへ誘導したり、正当に見えるが認証情報を別の場所へルーティングするログイン詳細を提供したりすることができました。その結果、クライアントは長期有効なクライアントシークレット、ワンタイム認可コード、PKCEプルーフキーを攻撃者へ送信してしまいます。これらの認証情報を用いることで、攻撃者は実際のログインサービスから有効なアクセストークンをリクエストでき、元のアプリケーションが持っていた権限をすべて獲得できます。
この欠陥の深刻度は、使用されるOAuthプロバイダーによって異なります。人間の介入なしで動作するマシン間(machine-to-machine)プロバイダーの場合、リスクは7.5と「高」に評価されています。ユーザーのサインインが必要なインタラクティブなプロバイダーの場合、スコアは6.5ですが、ユーザーは依然として本物のように見えるページでサインインを承認することになります。2026年9月29日時点でCVE番号は割り当てられておらず、現実世界での積極的な悪用事例も報告されていません。
仕組み
根本的な問題は、SDKが認可サーバーの発見処理をどのように扱うかにあります。OAuthフロー中、クライアントは認証リクエストを送信する場所を指定するためにMCPサーバーに依存します。脆弱性のあるSDKバージョンでは、認証情報を送信する前に、指定された認可サーバーが期待される発行者(issuer)と一致するかを検証していませんでした。
この検証の欠如により、悪意あるサーバーは認証情報の交換をリダイレクトすることができました。認可コードの再利用を防ぐために設計されたPKCE(Proof Key for Code Exchange)を使用していても、クライアントがプルーフキーを攻撃者に自発的に渡してしまうため、保護は無効化されました。これにより、攻撃者は正規のクライアントであるかのようにトークン交換プロセスを完了することが可能になりました。
主要な詳細
- 影響を受けるバージョン: MCP Python SDK 1.9.1–1.29.1 および 2.0.0–2.1.1。
- 修正済みバージョン: 1.x系の場合は1.30.0へ、2.x系の場合は2.2.0へアップグレードしてください。
- 脆弱なプロバイダー: OAuthClientProvider、ClientCredentialsOAuthProvider、PrivateKeyJWTOAuthProvider、および非推奨のRFC7523OAuthClientProvider。
- 影響を受けない設定: SDKを使って構築されたMCPサーバー、ローカルstdioクライアント、独自にトークンを添付するクライアントは脆弱ではありません。
- 設定要件: ClientCredentialsOAuthProviderとPrivateKeyJWTOAuthProviderを使用する場合、アップグレードだけでは不十分です。開発者は
issuer=パラメータを渡して、クライアントを特定のログインサービスにロックする必要があります。 - アップグレード後のアクション: アップグレード後、保存されているOAuthクライアント登録をクリアしてください。古い登録は特定のログインサービスに紐付けられていないためです。
なぜ重要なのか
AIエージェントを開発しているエンジニアや、MCPを通じて外部ツールを統合しているエンジニアにとって、この脆弱性は重要な信頼境界の失敗を表しています。MCP標準は、AIアプリケーションを多様なデータソースやツールに接続するように設計されており、多くの場合サードパーティのサーバーが関与します。もしあなたのアプリケーションが、信頼されていないまたは半信頼のサーバーに接続するMCPクライアントとして動作している場合、サービスへの永続的なアクセスを許可し得る長期有効な認証情報を暴露するリスクがあります。
修正の微妙さは運用上の複雑さを増します。特定のOAuthプロバイダーを使用するアプリケーションを完全に保護するには、単にSDKをアップグレードするだけでなく、issuerパラメータを明示的に設定する必要があります。Pythonはデフォルトで非推奨警告を隠すため、多くの開発者はこのパラメータを追加するという重要な指示を見落とし、更新後もアプリケーションが脆弱なままになる可能性があります。これは、MCPのような新しい標準を採用する際に、認証設定を入念に見直す必要性を示しています。
対応策
- 直ちにMCP Python SDKバージョン1.30.0または2.2.0へアップグレードしてください。
- ClientCredentialsOAuthProviderまたはPrivateKeyJWTOAuthProviderを使用している場合は、
issuer=パラメータが期待するログインサービスに設定されていることを確認してください。 issuer=オプションをまったく備えていない非推奨のRFC7523OAuthClientProviderからの移行を検討してください。- バインドされていないエントリを削除するため、アップグレード後に一度すべての保存済みOAuthクライアント登録をクリアしてください。
- クライアントが信頼できないサーバーに接続した可能性がある場合は、クライアントシークレットをローテーションし、ログインサービスで既存のトークンを失効させてください。
- 開発環境およびステージング環境でPythonの非推奨警告を有効にし、設定の問題を早期に検出できるようにしてください。



