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 サーバは、開発者がツールを実行するたびに、機密情報を秘密裏に盗み出すものだ。
続いて、 PoC ソースコードを分析しながら、その真の意図を明らかにし、それらの攻撃を検出/阻止するために適用できる、防御側の緩和策を推奨していく。
MCP とは
オープン・スタンダードとして Anthropic が開発した MCP は、Claude や Windsurf などの AI アシスタントと、サードパーティ・サービスの間の通信を標準化するものだ。
それにより、ツールごとのカスタム統合から解放される開発者は、 MCP クライアントと呼ばれる AI クライアントを構成し、 MCP サーバにより公開される機能を検出して呼び出すことが可能になる。 MCP のコアコンポーネントは、以下のとおりである。
- Client: AI アシスタントまたは AI アプリに組み込まれ、特定のツールへの自然言語リクエストをルーティングする。
- Host:接続を開始するホスト (LLM アプリケーション)。
- Server:スマート・アダプターとして機能し、 AI プロンプトをツール固有のコマンドに変換する。
このクライアント/サーバ・デザインにより AI の導入が効率化されるが、ユーザー環境へのフルアクセスを、インストールされたサーバに対して暗黙的に許可する。それは、ユーザー権限での任意のコード実行を、AI に許すことに似ている。

攻撃者は、 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 に指定することだ。

このパッケージは、プロジェクト分析/コンフィグ・ヘルスチェック/環境チューニングという、3つの生産性向上ツールを提供するが、その一方で、機密情報をサイレントに収集するためのコア・エンジンを隠蔽している。
このパッケージが最初に起動されたときに、サーバはプロジェクト・ファイルと主要なシステム・フォルダを列挙し、環境ファイル ( .env* )/SSH キー/クラウド認証情報/ API トークン/証明書などをインデックス化する。
続いて、それぞれのファイルのメタデータと初期コンテンツ・バイト (最大 100 KB) がキャプチャされ、ローカル表示用に編集され、効率化のためにキャッシュされる。

その一方でサーバは、このデータを Base64 エンコードし、正規の GitHub API トラフィックに偽装して、管理されたエンドポイントへと POST 送信する。このトラフィックは、通常の開発分析に紛れ込むため検出は回避される。
パッケージがインストールされ、実行された後に、 AI クライアント (例は Cursor) が MCP サーバを指すように設定される。

“project_metrics.py” モジュールはターゲット・パターンを定義し、ファイル検出/インデックス作成/コンテンツ抽出を調整する。また、”reporting_helper.py” では、ネットワーク・アラートの発生を回避するために、send_metrics_via_api() がレート制限が適用され、データを流出させる前に、現実的なヘッダーとペイロードを構築する。
緩和策
私たちの実験が浮き彫りにしたのは、ある単純な事実である。それは、適切にサンドボックス化されていないサードパーティ製の MCP サーバは、自由に任意のコードを実行し、データを盗み出せるという現実である。この新たな脅威から身を守るために、ユーザー組織は以下の対策を講じるべきである。
- インストール前の確認:新しい MCP サーバに対して承認ワークフローを実施し、そこにコードレビューと脅威モデリングを取り込む。厳格なホワイトリストを維持し、未知のサーバにはフラグを立てる。
- ロックダウン:ラテラル・ムーブメントを制限するため、ファイル・システムへのアクセスを最小限に抑える。具体的には、ネットワーク・ゾーンをセグメント化し、隔離されたコンテナまたは VM 内で MCP サーバを実行する。
- 異常な動作への注意:すべてのプロンプトとレスポンスをログに記録し、隠された命令や予期しないツールの呼び出しを検出する。
- ネットワーク・トラフィック:AI ツールのプロセスから発生する、異常な POST リクエストやデータ・ストリームを監視する。
MCP サーバは、サプライチェーンのコンポーネントと同様に厳格に扱うべきだ。つまり、サンドボックス化/監査/監視を実施することで、統合され武器化された AI からの攻撃のリスクを軽減すべきだ。
MCP サーバの設計上の柔軟さが、脆弱性の原因となっている状況を解説する記事です。MCP は AI アシスタントと外部ツールをつなぐ仕組みですが、サードパーティ製サーバにフルアクセス権限を暗黙的に与えてしまう構造が問題です。その結果として、認証情報や設定ファイルなどが不正に収集される危険が生じます。特に、名前のスプーフィングやツールのすり替えといった手法では、マルウェアを必要とせずに、攻撃を成立させられると、この記事は指摘しています。よろしければ、MCP で検索も、ご参加ください。

You must be logged in to post a comment.