MCPサーバー脆弱性の全体像: 3,601件から見える脅威の構造
3,601件のMCPサーバー検査データを基に、19の攻撃パターンの分布構造、サーバー機能別のリスクプロファイル、リスクを下げやすい設計条件を俯瞰する。脆弱性分析シリーズ第1回。
用語
| 用語 | 意味 |
|---|---|
| MCP サーバー | AI エージェントが外部機能を呼び出すための接続先(Model Context Protocol) |
| 攻撃パターン | MCPサーバーに対して成立しうる脅威の分類。本稿では19種類を定義 |
| サーバー機能カテゴリ | MCPサーバーが提供する機能の種類による分類(ファイル操作、API連携など) |
| 攻撃面 | サーバーが外部に露出する操作や入力の経路。機能が多いほど攻撃面は広がる |
| 検出レイヤー | 脅威の検出を行う検証の段階。宣言・コード・実行時の3段階 |
リード
MCPサーバーのセキュリティを論じる際、「危険なサーバーがある」という事実の指摘だけでは、組織の導入判断に十分な情報を提供できない。必要なのは、どのような種類のサーバーに、どのような脅威が、どの程度の頻度で存在するかという構造的な理解である。
本シリーズでは、3,601件のMCPサーバー検査データを基に、脅威の構造を複数の切り口で分析する。第1回となる本稿では、全体俯瞰を行う。19種類の攻撃パターンの分類体系、MCPサーバーの機能別カテゴリ、そしてサーバー機能と脅威の交差点を整理し、以降の分析の基盤となるフレームワークを提示する。
前回の報告(「3,601件のMCPサーバーを検査した結果」)では、詳細検査の70%で警告以上が出るという定量データを示した。本稿以降は、その70%の内訳——何が、なぜ、どこで検出されるのか——を掘り下げていく。
Key Findings
- 19の攻撃パターンは5つのカテゴリに大別できる。最も広い攻撃面を持つのは「コード実行・システムアクセス系」(Path Traversal, Shell RCE, Argument Injection)。
- コード実行系サーバーは19の脅威のうち13に晒され、攻撃面が最も広い。最も観測上リスクが低かった監視系でも7/19。自動的に低リスクとみなせるサーバー機能は存在しない。
- MCPサーバーの機能は12のカテゴリに分類可能。1つのサーバーが複数カテゴリに跨る「複合型」が一般的。
- 19の攻撃パターンのうち6種類はAI/MCPプロトコル固有であり、従来のWebセキュリティでは対処できない。
- Tool Poisoning や Supply Chain を含む6パターンは、サーバーの機能を問わず全種別に共通して適用される。
- 3,601件の脅威マッチング結果(各パターンの実検出頻度)は、次回に詳述する。
背景: MCPサーバーエコシステムの構造的特徴
急速に成長するエコシステム
MCPは2024年末にAnthropicから公開され、2025年後半からAIエージェント開発の事実上の標準として急速に普及した。npm、PyPI、GitHubを通じて公開されるMCPサーバーの数は数千件に達しており、ファイル操作からクラウドインフラ管理まで、あらゆる領域をカバーしている。
この成長速度は、セキュリティの検証が追いつかない状況を構造的に生み出している。開発者はMCPサーバーを公開するインセンティブ(利用者の獲得、コミュニティへの貢献)を持つが、そのセキュリティを第三者が検証する体制は確立されていない。
従来のパッケージセキュリティとの決定的な違い
npm パッケージやPythonライブラリのセキュリティ検査では、依存関係の脆弱性チェック(CVEデータベースとの照合)が中心的な手法である。しかし、MCPサーバーのリスクはこの手法では捉えきれない。
MCPサーバー固有のリスク要因は以下の通りである:
- AI エージェントへの権限委譲: MCPサーバーは単なるライブラリではなく、AIエージェントに対して操作権限を付与するゲートウェイである。ファイルの削除、コマンドの実行、外部サービスへのデータ送信など、影響範囲は従来のライブラリ依存よりも格段に広い。
- 宣言と実装の乖離: MCPサーバーのツール定義(宣言)と、実際のコード実装が一致している保証はない。「読み取り専用」と宣言しながら書き込み操作を行うサーバーは、メタデータの確認だけでは検出できない。
- 実行時の動的挙動: 静的コード解析で相対的に低リスクに見えたサーバーでも、実行時にネットワーク接続先を動的に変更する、外部からの指示に基づいて挙動を変えるといった動的リスクが存在する。
- クロスサーバー連携: 複数のMCPサーバーが連携して動作する場合、個別には低リスク寄りに見えるサーバーでも、連携パターンによって情報漏洩や権限昇格のリスクが生じる。
これらの特徴から、MCPサーバーのセキュリティ検査には、宣言レベル・コードレベル・実行時レベルの3段階を組み合わせた多層的なアプローチが必要になる。
MCPサーバーの機能分類
MCPサーバーの脅威を構造的に理解するには、まず「どのような機能のサーバーが存在するか」を整理する必要がある。3,601件の検査データから抽出されたサーバー機能は、以下の12カテゴリに分類できる。
| カテゴリ | 機能概要 | 代表的なユースケース |
|---|---|---|
| ファイルシステム操作 | ファイルの読み書き・削除・検索 | ローカルファイル管理、ドキュメント操作 |
| データベース接続 | SQL/NoSQLデータベースへのクエリ | PostgreSQL、SQLite、MongoDB操作 |
| API/Web連携 | 外部サービスのAPIを呼び出し | GitHub、Slack、Notion、Jira連携 |
| コード実行 | プログラムの実行・評価 | Python/Node.js実行環境、シェル操作 |
| 検索・情報取得 | Webやデータソースからの情報取得 | Web検索、データスクレイピング |
| AI/LLM連携 | AIモデルの呼び出し・管理 | モデルオーケストレーション、プロンプト管理 |
| クラウドインフラ | クラウドリソースの操作 | AWS、GCP、Azureのリソース管理 |
| バージョン管理 | ソースコード管理操作 | Git操作、リポジトリ管理 |
| コミュニケーション | メッセージングサービス連携 | メール送信、チャット操作 |
| 認証・アクセス制御 | 認証フローや資格情報の管理 | OAuth連携、トークン管理 |
| データ変換・処理 | データの変換・集計・加工 | ETL処理、フォーマット変換 |
| 監視・ロギング | システムの監視とログ管理 | ログ収集、メトリクス取得 |
機能の重複と複合性
実際のMCPサーバーは、上記の1つのカテゴリだけに収まることは稀である。例えば、GitHub連携のMCPサーバーは「API/Web連携」「バージョン管理」「ファイルシステム操作」の3カテゴリに跨る。データベース管理サーバーは「データベース接続」に加えて「ファイルシステム操作」(バックアップ)や「コード実行」(マイグレーションスクリプト)を含む場合がある。
この複合性は、脅威の評価を複雑にする。単一カテゴリだけを見てリスクを判断すると、他のカテゴリの機能を通じた攻撃経路を見落とす。したがって、MCPサーバーの脅威分析は、そのサーバーが持つすべての機能カテゴリに対して行う必要がある。
19の攻撃パターン: 5つのカテゴリで理解する
MCP Guard は19種類の攻撃パターンを定義し、176以上の検査項目で検出を行う。これらの攻撃パターンは、性質と影響範囲に基づいて5つのカテゴリに整理できる。
カテゴリ構成
| カテゴリ | 含まれる攻撃パターン | 特徴 |
|---|---|---|
| A: コード実行・システムアクセス | Path Traversal, Shell RCE, Argument Injection | 最も攻撃面が広い。ファイル操作やコマンド実行を持つサーバーの大半が対象 |
| B: データ窃取・通信介入 | Data Exfiltration, SSRF, MITM, DNS Rebinding | ネットワーク通信を行うサーバー全般が対象。情報漏洩に直結 |
| C: AI/MCP固有 | Tool Poisoning, Tool Name Collision, Prompt Injection, Function Hijacking, Indirect Theft, PleaseFix Attack | MCPプロトコル特有の攻撃。従来のセキュリティツールでは検出不能 |
| D: 権限・リソース悪用 | Clawdrain, OAuth Scope Abuse, Insecure Plugin Design | 権限の過剰取得やリソースの枯渇を狙う。運用コストに直接影響 |
| E: サプライチェーン・持続性 | Supply Chain, Rug Pull, Unicode Injection | 時間経過で発現する脅威。初回検査では検出できない場合がある |
カテゴリA: コード実行・システムアクセス系
Path Traversal(パストラバーサル)は、ファイルパスの操作を通じて意図しないファイルにアクセスする攻撃である。MCPサーバーにおいてこの攻撃の対象面が最も広い理由は、ファイル操作がMCPサーバーの基本機能の一つであり、ほとんどのサーバーが何らかの形でファイルパスを受け取るためである。
Shell RCE(シェルを経由したリモートコード実行)は、子プロセス生成やeval系関数を通じて任意コードを実行する攻撃である。Python の subprocess、Node.js の child_process、直接的な eval/exec の使用がこの脅威の入口となる。コード実行系のMCPサーバーでは本質的にこのリスクと隣り合わせであり、入力のサニタイズと権限の制限が安全性の鍵となる。
Argument Injection(引数インジェクション)は、コマンドテンプレートや引数の連結を悪用して想定外の操作を実行する攻撃である。Path TraversalやShell RCEほど広範ではないが、コマンドラインツールをラップするMCPサーバーでは特に注意が必要である。
カテゴリB: データ窃取・通信介入系
Data Exfiltration(データ外部送信)は、資格情報や機密データが外部に送信される脅威である。HTTP リクエストの送信先にユーザーデータが含まれる場合、宣言された機能とは無関係にデータが流出するリスクがある。API連携やWeb通信を行うサーバーで特に検出頻度が高い。
SSRF(Server-Side Request Forgery)は、MCPサーバーを踏み台にして内部ネットワークのリソースにアクセスする攻撃である。リモートでホストされるMCPサーバーでは、内部APIやメタデータエンドポイントへの到達経路となる。
MITM と DNS Rebinding は、通信経路の安全性を脅かす攻撃である。TLS検証の無効化や、DNS解決先の切り替えによるローカルネットワークへの侵入がこのカテゴリに含まれる。
カテゴリC: AI/MCP固有の攻撃
このカテゴリに含まれる6種類の攻撃は、MCPプロトコルとAIエージェントの特性を悪用するものであり、従来のWebセキュリティの知見だけでは対処できない。
Tool Poisoning(ツール宣言の改竄)は、ツールの説明文や宣言に悪意のある指示を埋め込み、AIエージェントの挙動を誘導する攻撃である。ツールの名前や説明文は人間が読むだけでなく、AIエージェントが実行判断の根拠とする情報でもあるため、ここに悪意ある誘導が含まれると、エージェントが意図しない操作を実行する可能性がある。
Tool Name Collision(ツール名の衝突)は、信頼されたツールと同名のツールを提供することで、正規のツール呼び出しを横取りする攻撃である。複数のMCPサーバーを同時に使用する環境で特にリスクが高い。
Prompt Injection(プロンプトインジェクション)は、MCPサーバーが返すデータやエラーメッセージの中にAIエージェントへの指示を埋め込み、エージェントの動作を乗っ取る攻撃である。
Function Hijacking(関数の乗っ取り)は、プロトタイプ汚染やフック改変によって、MCPサーバー内部の制御フローを乗っ取る攻撃である。
Indirect Theft(間接窃取)は、複数のMCPサーバーを連鎖的に呼び出し、個々のサーバーの検査では検出できない形でデータを窃取する攻撃である。サーバーAがサーバーBを呼び出し、その結果を外部に送信するといったパターンがこれに該当する。
PleaseFix Attack(自動修復の悪用)は、「自動修復」「自動実行」を宣言するツールを利用して、ユーザーの確認なしに危険な操作を走らせる攻撃である。
カテゴリD: 権限・リソース悪用系
Clawdrain(リソース枯渇攻撃)は、過剰なAPI呼び出しや無制限のデータ取得を通じて、利用者のコスト爆発やサービス停止を引き起こす攻撃である。AI エージェントがループ実行する環境では、1つのMCPサーバーの暴走がインフラ全体に波及するリスクがある。
OAuth Scope Abuse(OAuth権限の過剰要求)は、機能に対して不必要に広いOAuth スコープを要求する設計である。「読み取り」のみで十分なサーバーが「読み書き削除」権限を要求するケースが典型的。
Insecure Plugin Design(プラグイン設計の不備)は、プラグインや拡張機構の権限境界が弱く、意図しないコードの読み込みや実行が可能になる設計上の問題である。
カテゴリE: サプライチェーン・持続性
Supply Chain(サプライチェーン攻撃)は、MCPサーバーの依存パッケージや配布経路が汚染されることで、間接的に危険なコードが混入する脅威である。
Rug Pull(挙動変化攻撃)は、初回公開時には相対的に低リスクに見えたサーバーが、アップデートを通じて悪意ある挙動に変化する脅威である。この攻撃は初回検査では検出できず、定期的な再検査と差分監視によってのみ検出可能である。
Unicode Injection(Unicode注入)は、不可視文字や見た目が同じ別の文字(ホモグリフ)を使って、コードレビューやセキュリティ検査を回避する手法である。
サーバー機能と脅威の交差点
MCPサーバーの機能カテゴリと攻撃パターンの間には、構造的な対応関係がある。以下の表は、各サーバー機能がどの脅威に晒されるかを具体的に示す。対象脅威数はサーバー種別ごとの攻撃面の広さを表す。
| サーバー機能 | 対象脅威数 | 特に注意すべき脅威 |
|---|---|---|
| コード実行 | 13/19 | Shell RCE, Path Traversal, Argument Injection, Function Hijacking, Data Exfiltration, Clawdrain |
| クラウドインフラ | 10/19 | OAuth Scope Abuse, SSRF, Data Exfiltration, MITM |
| API/Web連携 | 10/19 | Data Exfiltration, SSRF, DNS Rebinding, MITM |
| AI/LLM連携 | 10/19 | Prompt Injection, Clawdrain, Indirect Theft, PleaseFix Attack |
| データベース接続 | 10/19 | Data Exfiltration, SSRF, Path Traversal, Argument Injection |
| 認証・アクセス制御 | 10/19 | OAuth Scope Abuse, Data Exfiltration, Indirect Theft |
| ファイルシステム操作 | 9/19 | Path Traversal, Data Exfiltration, Shell RCE |
| 検索・情報取得 | 9/19 | SSRF, Data Exfiltration, MITM |
| コミュニケーション | 8/19 | Data Exfiltration, SSRF, Indirect Theft |
| バージョン管理 | 8/19 | Path Traversal, Shell RCE, Supply Chain |
| データ変換・処理 | 8/19 | Path Traversal, Shell RCE, Clawdrain |
| 監視・ロギング | 7/19 | Data Exfiltration, SSRF |
注: Tool Poisoning, Tool Name Collision, Prompt Injection, Supply Chain, Rug Pull, Unicode Injection の6パターンは全サーバー種別に共通して適用される。上記の対象脅威数にはこれら共通脅威を含む。
この表から読み取れる重要な構造的パターンは以下の通りである:
- コード実行系サーバーは19の脅威のうち13に晒される。 攻撃面が最も広く、検査の優先度が最も高い。
- クラウド・API・AI/LLM・DB・認証の5カテゴリが同率10/19。 ネットワーク通信と権限管理を持つサーバーは、種別を問わず広い攻撃面を持つ。
- 最も観測上リスクが低かった監視・ロギング系でも7/19。 共通脅威6種に加え、データ収集機能によるExfiltration・SSRFのリスクがあり、自動的に低リスクとみなせるサーバー機能は存在しない。
- Data Exfiltration はほぼ全カテゴリに出現する。 ネットワーク通信を持つ限り、データ外部送信のリスクは排除できない。
リスクを下げやすいMCPサーバー設計の条件
上記の脅威構造から、観測上リスクを下げやすいMCPサーバー設計の条件を整理する。
1. 最小権限の原則
サーバーが宣言する機能と、実際に必要な権限を一致させる。「念のため」の広い権限要求は、OAuth Scope Abuse や Insecure Plugin Design の温床になる。
2. 宣言と実装の一致
ツール定義で宣言された入出力仕様と、実際のコード実装が一致していることを検証可能にする。宣言と実装の乖離は、Tool Poisoning やデータ外部送信の隠蔽に使われる。
3. 入力の厳密な検証
ファイルパス、URL、コマンド引数など、ユーザー入力を受け取るすべての箇所で、Path Traversal、Argument Injection、SSRFに対する防御を実装する。
4. ネットワーク通信の透明性
外部への通信先と通信内容を宣言し、宣言外の通信を検出可能にする。Data ExfiltrationとSSRFの防止には、通信の透明性が基盤となる。
5. 継続的な監視と再検査
初回の安全検査だけでは不十分である。Rug Pull や Supply Chain 攻撃に対しては、定期的な再検査と差分監視が必要である。ソースコードのハッシュ変更、依存パッケージの更新、ツール定義の変更を継続的に追跡する体制が求められる。
6. クロスサーバー連携でリスクを増幅させない設計
Indirect Theft を防ぐには、他のMCPサーバーを呼び出す際のデータフローを明示し、意図しないデータの横流しを防止する設計が必要である。
本シリーズの構成
本稿は「MCPサーバー脆弱性分析シリーズ」の第1回として、脅威の全体構造を俯瞰した。以降のシリーズでは、この構造を基に具体的なデータ分析を展開する。
| 回 | テーマ | 内容 |
|---|---|---|
| 1 | 全体俯瞰(本稿) | 脅威の構造、サーバー機能分類、攻撃面のマッピング |
| 2 | 攻撃パターン別の実検出分布 | 3,601件の検査データから、各攻撃パターンの検出頻度と分布を分析 |
| 3 | サーバー機能別リスクプロファイル | 高リスク機能カテゴリの特定と、機能の組み合わせがリスクに与える影響 |
| 4 | コード実行系サーバーの深掘り | Shell RCE / Path Traversal の検出パターンと回避困難性の分析 |
| 5 | AI/MCP固有攻撃の最前線 | Tool Poisoning / Prompt Injection / Indirect Theft の実態と対策 |
次回予告: 第2回では、3,601件のMCPサーバーに対する脅威マッチング結果を公開し、19の攻撃パターンがそれぞれどの程度の頻度で検出されるかを定量的に示す。どの攻撃パターンが最も多く、どのサーバー機能と結びついているかのクロス分析を予定している。
限界
- 本稿の分類体系は、現時点で確認されている脅威パターンに基づく。MCPエコシステムの進化に伴い、新たな脅威カテゴリが追加される可能性がある。
- サーバー機能の12カテゴリ分類は、主要な機能を網羅しているが、特殊用途のサーバー(ハードウェア制御、IoTなど)は含まれていない。
- 脅威の交差表は定性的な対応関係を示すものであり、定量的な検出頻度は次回以降に報告する。
- 検査手法の具体的な実装詳細は、検査回避の防止のため公開しない。
Conclusion
MCPサーバーの脆弱性は、19の攻撃パターンが5つのカテゴリに構造化でき、12のサーバー機能カテゴリとの交差点で理解する必要がある。ファイル操作とネットワーク通信という最も基本的な機能が、最も広い攻撃面を形成するという事実は、大多数のMCPサーバーが何らかの脅威に晒されていることを意味する。
特に、AI/MCPプロトコル固有の6種類の攻撃(Tool Poisoning、Tool Name Collision、Prompt Injection、Function Hijacking、Indirect Theft、PleaseFix Attack)は、従来のセキュリティツールのカバレッジ外にあり、専用の検出メカニズムを必要とする。
リスクを下げやすいMCPサーバー設計には、最小権限・宣言一致・入力検証・通信透明性・継続監視・連携時の境界管理の6つの条件が重要である。これらの条件がどの程度達成されているかを定量的に評価するのが、本シリーズの目的である。
MCP Guard は19の攻撃パターンを176以上の検査項目で監視し、MCPサーバーのリスクを多角的に評価します。
