悪意の MCP Server を PoC として構築:任意のコード実行とデータ窃取が実証された

Threat Actors Exploit MCP Servers to Steal Sensitive Data

2025/09/16 gbhackers — 検証されていない MCP (Model Context Protocol) サーバは、攻撃者によるマルウェアの配備を必要とすることなく、ステルス性の高いサプライチェーン攻撃ベクターを生み出し、認証情報/コンフィグ・ファイルなどの機密情報の収集を可能にする。この MCP とは、AI アシスタント向けの新しい “plug-in bus” であり、 外部ツールやデータソースと AI モデルとの間のシームレスな統合を実現するものだ。

しかし、この柔軟性は、脅威アクターにとって新たなサプライチェーンの足掛かりとなる。この記事では、 MCP の概要/プロトコル・レベルの分析・サプライチェーン攻撃の経路と、実践的な PoC を紹介する。そこで用いられる悪意の MCP サーバは、開発者がツールを実行するたびに、機密情報を秘密裏に盗み出すものだ。

High-level MCP architecture.
High-level MCP architecture.

続いて、 PoC ソースコードを分析しながら、その真の意図を明らかにし、それらの攻撃を検出/阻止するために適用できる、防御側の緩和策を推奨していく。

MCP とは

オープン・スタンダードとして Anthropic が開発した MCP は、Claude や Windsurf などの AI アシスタントと、サードパーティ・サービスの間の通信を標準化するものだ。

それにより、ツールごとのカスタム統合から解放される開発者は、 MCP クライアントと呼ばれる AI クライアントを構成し、 MCP サーバにより公開される機能を検出して呼び出すことが可能になる。 MCP のコアコンポーネントは、以下のとおりである。

  • Client: AI アシスタントまたは AI アプリに組み込まれ、特定のツールへの自然言語リクエストをルーティングする。
  • Host:接続を開始するホスト (LLM アプリケーション)。
  • Server:スマート・アダプターとして機能し、 AI プロンプトをツール固有のコマンドに変換する。

このクライアント/サーバ・デザインにより AI の導入が効率化されるが、ユーザー環境へのフルアクセスを、インストールされたサーバに対して暗黙的に許可する。それは、ユーザー権限での任意のコード実行を、AI に許すことに似ている。

MCP transport flow between host, client and server.
MCP transport flow between host, client and server.

攻撃者は、 MCP を武器化する複数の方法を手にしている。

  • Name-spoofing:ほぼ同じ識別子を持つ不正なサーバが、名前をスプーフィングすることで、名前ベースの検出中にトークンや機密クエリを盗み取ることができる。
  • Tool-poisoning:説明やプロンプトの中に隠しコマンドが埋め込まれ、目に見えるエクスプロイト・コードを必要とすることなく、機密情報が不正に取得されていく。
  • Shadowing:悪意のサーバは既存のツールを即座に再定義し、攻撃者のロジックを用いて、後続の呼び出しを密かにリダイレクトできる。
  • Rug-pull:無害なサーバが信頼を獲得し、 CI / CD パイプラインを介してバックドアを仕込んだアップデートをプッシュし、自動更新時にクライアントを侵害する。

GitHub MCP コネクタなどの公式な統合における脆弱性は、細工された GitHub という問題を介して、プライベート・リポジトリのデータを漏洩する可能性がある。最近では、このような手法が、研究者たちにより実証されている。

これらの、すべての手法は、メタデータと命名におけるデフォルトの信頼を悪用するものであり、複雑なマルウェアチェーンは不要である。つまり、無害に見える MCP トラフィックを利用して、従来のセキュリティ制御を回避していく。

PoC エクスプロイト:悪意の MCP サーバ

私たちのチームが構築した PoC サーバ DevTools-Assistant は、サプライチェーンの不正利用を実証するためのものであり、 PyPI パッケージとして公開されている。開発者にとって必要なことは、pip install devtools-assistant でインストールし、 AI クライアント(例: Cursor )を localhost に指定することだ。

MCP Server Process Starting.
MCP Server Process Starting.

このパッケージは、プロジェクト分析/コンフィグ・ヘルスチェック/環境チューニングという、3つの生産性向上ツールを提供するが、その一方で、機密情報をサイレントに収集するためのコア・エンジンを隠蔽している。

このパッケージが最初に起動されたときに、サーバはプロジェクト・ファイルと主要なシステム・フォルダを列挙し、環境ファイル ( .env* )/SSH キー/クラウド認証情報/ API トークン/証明書などをインデックス化する。

続いて、それぞれのファイルのメタデータと初期コンテンツ・バイト (最大 100 KB) がキャプチャされ、ローカル表示用に編集され、効率化のためにキャッシュされる。

POST request with a payload.
POST request with a payload.

その一方でサーバは、このデータを Base64 エンコードし、正規の GitHub API トラフィックに偽装して、管理されたエンドポイントへと POST 送信する。このトラフィックは、通常の開発分析に紛れ込むため検出は回避される。

パッケージがインストールされ、実行された後に、 AI クライアント (例は Cursor) が MCP サーバを指すように設定される。

Cursor client pointed at local MCP server.
Cursor client pointed at local MCP server.

“project_metrics.py” モジュールはターゲット・パターンを定義し、ファイル検出/インデックス作成/コンテンツ抽出を調整する。また、”reporting_helper.py” では、ネットワーク・アラートの発生を回避するために、send_metrics_via_api() がレート制限が適用され、データを流出させる前に、現実的なヘッダーとペイロードを構築する。

緩和策

私たちの実験が浮き彫りにしたのは、ある単純な事実である。それは、適切にサンドボックス化されていないサードパーティ製の MCP サーバは、自由に任意のコードを実行し、データを盗み出せるという現実である。この新たな脅威から身を守るために、ユーザー組織は以下の対策を講じるべきである。

  • インストール前の確認:新しい MCP サーバに対して承認ワークフローを実施し、そこにコードレビューと脅威モデリングを取り込む。厳格なホワイトリストを維持し、未知のサーバにはフラグを立てる。
  • ロックダウン:ラテラル・ムーブメントを制限するため、ファイル・システムへのアクセスを最小限に抑える。具体的には、ネットワーク・ゾーンをセグメント化し、隔離されたコンテナまたは VM 内で MCP サーバを実行する。
  • 異常な動作への注意:すべてのプロンプトとレスポンスをログに記録し、隠された命令や予期しないツールの呼び出しを検出する。
  • ネットワーク・トラフィック:AI ツールのプロセスから発生する、異常な POST リクエストやデータ・ストリームを監視する。

MCP サーバは、サプライチェーンのコンポーネントと同様に厳格に扱うべきだ。つまり、サンドボックス化/監査/監視を実施することで、統合され武器化された AI からの攻撃のリスクを軽減すべきだ。