セッションハイジャックのAI版により、攻撃者が正規のMCP通信に悪意のあるプロンプトを注入する可能性があります。
モデルコンテキストプロトコル(MCP)は、ITチームがAIベースのワークフローを開発する際に、大規模言語モデル(LLM)をツールやデータソースに標準化された方法で接続できるようにします。
しかし、セキュリティ研究者は、MCPサーバー上でセッションID管理が安全に実装されていない場合、MCPベースのAIワークフローが悪意のあるプロンプトインジェクション攻撃に対して脆弱になる可能性があると警告しています。
「セッションハイジャックはウェブアプリケーションでよく知られた脆弱性ですが、プロンプトハイジャックはこの脆弱性の新しい形であり、MCPのインタラクションパターンによって可能になる危険な攻撃ベクトルです。特に予測可能なセッションIDを生成するMCPサーバーで見られます」と、セキュリティ企業JFrogの研究者は新しいレポートで述べています。
この問題がAIワークフローやエージェントにどのような影響を与えるかの例として、JFrogが最近発見したoatpp-mcpの脆弱性があります。これはC++でウェブアプリケーションを開発するための人気フレームワークOat++(oatpp)向けのMCP実装です。CVE-2025-6515として追跡されているこの欠陥は、oatpp-mcpがMCPクライアントとの通信で推測可能なセッションIDを生成することに起因しており、他のMCPサーバーにも同様の問題がある可能性があります。
MCPサーバーが通信を保護する方法
モデルコンテキストプロトコルは、AI企業Anthropicによって開発され、LLMと外部データソースやアプリケーション間の通信を可能にし、ワークフローのコンテキストを向上させます。MCPは広く採用されており、外部ツールを活用してタスクを自動化するAIエージェントの開発において重要なコンポーネントです。
MCPはクライアント-サーバーモデルを使用し、複数の通信方法をサポートします。LLMに自分の内容や機能を公開したいアプリケーションやデータソースは、自身のMCPサーバーを介してそれを行います。そして、プロンプトを通じてLLMとやり取りするAIエージェント、AIチャットボットアプリケーション、またはIDEは、MCPクライアント実装を通じてMCPサーバーからコンテキストデータを取得できます。
例えば、お気に入りのモデルを組み込んだIDEで作業している開発者が、特定のタスクに最適なPythonパッケージを見つけるようモデルに指示したとします。モデルはIDEのMCPクライアントを使って、Pythonインデックス(PyPI)を検索するためのMCPサーバーに接続し、そのクエリに対するパッケージ名を返すことができます。
MCPサーバーとクライアントは、HTTPによるServer-Sent Events(SSE)を含む複数の通信タイプをサポートしています。この転送メカニズムはoatpp-mcpでも使用されており、クライアントがGETリクエストでサーバーへの接続を開始し、サーバーがセッションIDを生成して応答します。その後、クライアントはそのセッションIDを使ってMCPサーバーが公開するエンドポイントにPOSTリクエストを送信でき、サーバーはJSON形式で結果を返します。
セッションIDは一意かつ安全でなければならない
セッションIDは、MCPサーバーが異なるクライアントからの同時接続を区別するためのものであり、そのため一意で暗号学的に安全な方法で生成されることが重要です。つまり、推測できてはなりません。これはMCPプロトコルの新しいStreamable HTTP仕様では要件となっていますが、元のSSE転送仕様では要件ではなかったため、多くのMCPサーバーがセッションIDの一意性を実装していない可能性があります。
「セッションIDがサーバーの応答先を決定するため、漏洩すると悪用の扉が開かれます」とJFrogの研究者は警告します。「攻撃者が有効なセッションIDを取得すると、MCPサーバーに悪意のあるリクエストを送信できます。これらのリクエストは正規のクライアントからのものとしてサーバーで処理され、応答は元のクライアントセッションに返されます。」
oatpp-mcpの場合、JFrogの研究者は、攻撃者が大量の接続をMCPサーバーに開いてセッションIDを生成し、その後接続を閉じることで、そのセッションIDが解放され正規のクライアントに再割り当てされることを実証しました。攻撃者はそのIDを再利用して、サーバーに悪意のある応答を生成させ、それをクライアントに送ることができます。
「MCPはプロンプトを含む構造化リクエストをサポートしています」と研究者は指摘します。「例えば、クライアントがサーバーにプロンプトを要求することがありますが、その間に攻撃者が自分の悪意のあるプロンプトを注入することができます。クライアントは攻撃者によって改ざんされた応答を受け取り、それに基づいて動作してしまう可能性があります。」
対策
まず、MCPサーバーの開発者は自分たちの実装を見直し、少なくとも128ビットのエントロピーを持つ暗号学的に安全な乱数生成器を使用して、再利用されない一意のセッションIDを生成する必要があります。
サーバーがこれを行わない場合、MCPクライアント側でリクエストごとにイベントIDを使用し、同じイベントIDの応答のみを受け入れることでこの問題を緩和できます。セッションと同様に、これらのイベントIDも予測不可能でなければなりません。残念ながら、研究者は多くのMCPクライアントがインクリメンタルなイベントIDを使用しており、ブルートフォース攻撃が可能であることを発見しました。
「AIモデルがMCPのようなプロトコルを通じてワークフローにますます組み込まれるにつれ、新たなリスクが生じます。このセッションレベルのエクスプロイトは、モデル自体が無傷のまま、その周囲のエコシステムが侵害されることを示しています」と研究者は述べています。
翻訳元: https://www.csoonline.com/article/4077414/prompt-hijacking-puts-mcp-based-ai-workflows-at-risk.html