3行でいうと
- ツールの説明文はモデルにとって「読む文章」です。そこに隠された指示が、利用者に見えないまま働く事例が公開されています。
- 公式仕様は、ツールを任意のコード実行に等しいと扱い、実行前の同意を求めています。見知らぬサーバーは、手元のコードを動かすのと同じ重さです。
- 対策の中心は、権限を最小にする、人の承認を残す、隔離する、信頼できる提供元に限る、の4つです。
この記事は、実際に使って確かめた記録ではありません。この記事は公式の文書や論文を読んでまとめたものです。また、攻撃の手順は書きません。何が起きうるかと、どう備えるかに絞ります。
先に結論
- MCPサーバーは、ツール(AIが呼ぶ関数)の「説明文」もAIに渡します。説明文に指示を書き込めば、AIが従うことがあります。これがツール汚染(tool poisoning)です。2025年4月に、あるセキュリティ会社が実例を公開しました。
- 危険の本体は「サーバーが悪意を持つ」場合だけではありません。正規のサーバーでも、外から来た文章(掲示板の投稿、メール、課題票)を読ませると、その中の指示でAIが操られることがあります(間接的なプロンプトインジェクション)。
- 手元で動かすMCPサーバーは、あなたの権限で動くプログラムです。見知らぬものを入れるのは、見知らぬ実行ファイルを動かすのと同じです。
- 対策は1つでは足りず、重ねて使う前提です。
前提:用語を先にそろえる
- MCP:AIアプリが、外部のデータや機能を呼び出すための公開仕様。呼び出される側が「MCPサーバー」です。作る側の話は、別の記事「MCPサーバーを作る」にあります。
- ツールの説明文:サーバーが「この関数は何をするか」をAI向けに書いた文章。AIはこれを読んで、使うかどうかを決めます。
- プロンプトインジェクション:AIが読む文章の中に、AIへの命令を紛れ込ませ、本来の指示を上書きさせる攻撃です。
- 最小権限:仕事に必要な最小の権限だけを渡す、という考え方です。
- CVE:公開された脆弱性につく番号です。CVSSは、その深刻さを0〜10で表す点数です。
何が起きうるか:公開された5つの型
1. ツール汚染(説明文に仕込まれた指示)
Invariant Labs(セキュリティ会社)は、2025年4月1日の記事で次の実験を公開しました。2つの数を足すだけの偽のツールの説明文に、AIへの指示を隠し、Cursor(コーディング用のAIアプリ)で試した、という内容です。AIが利用者の設定ファイルや秘密鍵を読み、ツールの引数に載せて悪意あるサーバーへ送った、と書かれています。
記事の指摘で重要なのは、見え方の差です。利用者の確認画面には、簡略化されたツール名しか出ず、引数の全体は見えません。モデルには説明文の全文が見えます。記事は、Cursorが拡張表示でも入力の全体を見せなかった、としています。ほかのAIアプリでも、説明文を適切に検証・表示しなければ同じことが起きうる、というのが記事の主張です。
2. ラグプル(承認したあとで中身が変わる)
同じ記事は、サーバーが、承認された後にツールの説明文を書き換える可能性を挙げています。最初に信頼して入れたサーバーでも、後から危険になりえます。
3. シャドーイング(別のサーバーの振る舞いを変える)
複数のサーバーをつなぐと、AIはすべての説明文を同時に読みます。同記事の実験では、悪意あるサーバーの説明文が、信頼できるメール送信ツールの使い方を書き換え、宛先を攻撃者に変えました。攻撃者のツールを実際に呼ばせなくても、他のツールの挙動を変えられる、と記事は述べています。
4. 正規のツールを通じた情報の持ち出し
Invariant Labsの2025年5月26日の記事は、GitHubのMCPサーバーでの例を示しています。攻撃者が公開リポジトリに悪意ある課題(issue)を書き、利用者のAIが「未対応の課題を見て」と頼まれて読むと、非公開リポジトリの情報を引き出して公開側の変更依頼(プルリクエスト)に書いてしまう、という流れです。記事は、ツール自体は侵害されておらず、これは設計上の問題でありサーバー側の修正だけでは解決しない、としています。また、確認画面が出ても、利用者が「常に許可」を選ぶことが多く、監視が弱まる点を挙げています。
5. 実装の欠陥(CVE)
- CVE-2025-6514:
mcp-remote(遠隔のMCPサーバーにつなぐ橋渡しのnpmパッケージ)に、OSコマンドの注入の欠陥。信頼できないMCPサーバーにつないだとき、認可用のURLを細工されると起きる、と脆弱性の記録に書かれています。影響を受ける版は0.0.5から0.1.15まで。CVSS 3.1の点数は9.6(Critical)で、これは割り当てた機関(JFrog)の評価です。公開日は2025年7月9日(NVD)。 - CVE-2025-49596:MCP Inspector(MCPサーバーの試験用の公式の道具)に、リモートコード実行の欠陥。クライアントとプロキシの間に認証がなく、認証なしの要求でコマンドを動かせた、とされています。0.14.1未満が対象で、0.14.1で修正。CVSS 4.0で9.4(Critical)、割り当てはGitHub。公開日は2025年6月13日(NVD)。
どちらも修正済みの版があります。ここで押さえておきたいのは、MCP周辺の道具そのものが攻撃の入口になった実例だ、という点です。
公式は何と言っているか
MCPの仕様
MCP公式仕様の「Security and Trust & Safety」は、要点を次のように書いています。
- ツールは任意のコード実行を表すので、相応の注意をもって扱うこと。
- ツールの振る舞いの説明(注釈を含む)は、信頼できるサーバーから得たのでない限り、信頼してはいけない。
- ホストは、ツールを呼ぶ前に、利用者の明示的な同意を得ること。
ツールの仕様のページには、安全のための推奨が並びます。人が拒否できる状態を必ず作ること(SHOULD)、ツールの入力を呼ぶ前に利用者へ見せて、意図しない流出を防ぐこと(SHOULD)、結果をモデルに渡す前に検証すること(SHOULD)。サーバー側には、入力の検証、アクセス制御、呼び出しの速度制限、出力の無害化がMUST(必須)です。
安全のベストプラクティスのページは、次を攻撃として扱っています。
- ローカルサーバーの乗っ取り:クライアントの設定に悪意ある起動コマンドを仕込む、サーバー本体に悪意を仕込む、など。ワンクリックで入れるクライアントは、実行する正確なコマンドを省略せず見せ、承認を取ること(MUST)。サンドボックスで最小の権限で動かすことが推奨されています。
- トークンの素通し(token passthrough):サーバーが、自分宛てでない通行証を受け取って下流に渡すこと。「自分宛てに発行されたもの以外は受け付けない」ことがMUSTです。
- 権限範囲(スコープ)の広げすぎ:全権限をまとめて取ると、漏れたときの被害が大きくなる。必要最小から始め、必要な時に段階的に広げる。
- SSRF(サーバーが内部向けのURLを叩かされる攻撃)、混同された代理人(confused deputy)、状態を示すハンドルの乗っ取りも挙がっています。
OWASPの「MCP Top 10」
OWASP(Webなどの安全に関する非営利の団体)は、MCP向けの10項目のリストを出しています。公式ページは、プロジェクトがベータ段階(ロードマップ上の「Phase 3」)にあるとしており、版の番号や日付は書かれていません。項目は次の10個です(見出しの意訳)。
| ID | 項目 |
|---|---|
| MCP01 | トークンの管理不備と秘密情報の露出 |
| MCP02 | 権限の少しずつの肥大による昇格 |
| MCP03 | ツール汚染 |
| MCP04 | ソフトウェア供給網の攻撃と依存関係の改ざん |
| MCP05 | コマンドの注入と実行 |
| MCP06 | 文脈に埋め込まれた内容によるプロンプトインジェクション |
| MCP07 | 認証・認可の不足 |
| MCP08 | 監査と記録の欠如 |
| MCP09 | 無許可のMCPサーバー(シャドーMCP) |
| MCP10 | 文脈の混入と共有しすぎ |
OWASPの「LLMアプリ向けTop 10(2025年版)」のLLM06 Excessive Agency(過剰な裁量)は、危険の根を3つに分けています。機能が多すぎる、権限が多すぎる、人の確認なしに大きな行動をとる自律性が高すぎる、の3つです。対策として、拡張(ツール)の数を絞る、シェルやURL取得のような何でもできるツールを避ける、利用者本人の最小権限で動かす、影響の大きな操作は人が承認する、下流の側でも許可を確かめる、が挙がっています。ログや速度制限は、被害を抑えるが予防にはならない、との整理です。
各社の公式ガイドに書かれていること
Claude Code(Anthropic):セキュリティの頁は、MCPについて「自分で書くか、信頼できる提供元のサーバーを使うよう勧める」と書いています。Anthropicは、掲載の基準に照らしてコネクタを審査するが、MCPサーバー自体の安全監査や管理はしない、とも明記しています。プロジェクトの.mcp.jsonにあるサーバーは、対話の起動時に承認を求められます。ただし、非対話の実行(claude -p、Agent SDK、プロジェクトのスレッド以外のクラウドのセッション)ではこの確認が出ずに読み込まれると書かれています。MCPの頁には「各サーバーを信頼できるか確認すること。外部の内容を取得するサーバーは、プロンプトインジェクションの危険にさらす」とあります。組織向けには、許可・拒否するサーバーを管理設定で絞る方法が用意されています。
OpenAI:エージェント構築の安全の頁は、リスクとしてプロンプトインジェクションと、攻撃者がいなくても起こる「私的データの意図せぬ漏えい」を挙げています。後者について、モデルが何をMCPに送るかは完全には制御できない、と書かれています。対策の中心は、MCPツールの承認を有効にしておき、読み取りも書き込みも利用者が確認すること、信頼できない入力を開発者メッセージに入れないこと、ノード間で構造化された出力(列挙型など、自由記述を許さない形)を使うこと、ガードレールを第一の層として置くこと、です。ガードレールは万全ではない、とも書かれています。同じ頁に、Agent Builderを2026年11月30日に終了する予定、という記載があります。
Google Cloud:MCPのAI安全の頁は、エージェントの識別子を作り最小権限を与えること、データと指示を分けること、MCPの呼び出しと応答をModel Armorで検査すること、使えるツールを絞ること、IAMで組織・プロジェクト・フォルダ単位でMCPの利用を制限すること、本番の資源には読み書きを拒否する方針(deny policy)を使うことを挙げています。リスクとしては、信頼したMCPサーバーが黙ってツールを追加する「動的ツール」、人の承認での誤り、取り消せない変更などを挙げています。
対策の組み立て方
見立てです。上の資料を並べると、守りは4つの層にまとめられると思います。どれか1つで足りるとは、どの資料も言っていません。
- 入れるものを絞る:見知らぬサーバーを入れない。入れるなら、提供元、更新の履歴、要求する権限を確かめる。MCPの仕様やOWASPが挙げる供給網の問題は、ここで効きます。
- 渡す権限を絞る:読み取り専用の通行証から始める。範囲は必要になってから広げる。1つのセッションで、触れるリポジトリや資料を限る(Invariantの記事の提案)。
- 人の承認を残す:書き込み、送信、削除、支払いは確認を挟む。「常に許可」は、影響の小さい操作に限る。
- 隔離と記録:コンテナやVMの中で動かす。ネットワークの出口を絞る。ツールの呼び出しを記録する(OWASP MCP08、MCPの仕様のクライアント向けの推奨)。
もう1つ。見立てです。ツール汚染は「説明文を読ませない」ことでは防げません。説明文がモデルの入力である以上、読ませないと使えないからです。だから、承認画面でツールの入力の全文を見られること、説明文が変わったら再承認になること、がクライアントを選ぶときの確認点になると思います。この2点を各クライアントが満たしているかは、僕らは確認できていません。
よくある失敗・つまずき
見立てです。公開された資料から、起きやすいと思う点を挙げます。
- 「公式のディレクトリに載っているから安全」と考える。Anthropicは、審査はするが安全監査はしないと書いています。
- 自分は信頼できるサーバーだけを使っているから大丈夫、と考える。正規のサーバーでも、外部の投稿や受信メールを読む機能があれば、そこが入口になります(GitHubの例)。
- 1つのトークンに、全リポジトリ・全資料の権限を付ける。
- 手間を嫌って承認を常に許可にする。
- 試験用の道具(Inspectorなど)を、認証なしでネットワークに開いたままにする(CVE-2025-49596の背景)。
- 非対話の実行(自動化、CI)では、対話時の承認画面が出ない場合があることを忘れる。
気をつけること
- この記事は、ここで紹介した攻撃も対策も、再現して確かめた記録ではありません。公開された報告と公式文書を読んでまとめたものです。
- Invariant Labsの記事は、セキュリティ会社が自社の見解として公開したものです。当時の特定のクライアントでの結果で、現在のバージョンで同じことが起きるかは確認できていません。
- OWASP MCP Top 10は、ベータ段階です。項目や名称は変わる可能性があります。ページには版の番号や日付がなかったので、いつの版かは確認できていません。
- CVSSの点数は、割り当てた機関の評価です。NVD自身の評価はまだ付いていませんでした。点数が高いことは、あなたの環境で同じ被害が出ることを意味しません。環境や使い方で変わります。
- 脆弱性の影響を受ける版と修正版は、記録に書かれた範囲です。実際に使っている版は、必ず自分の環境で確認してください。
- 各社のガイドは、それぞれの製品を前提に書かれています。他社の製品にそのまま当てはまるとは限りません。製品間の優劣を比べてはいません。
- MCPの仕様は更新が続いています(この記事で読んだのは2026-07-28版)。必須かどうかの区分は、版で変わります。
- 安全の判断は、扱うデータや契約によって変わります。業務で使う場合は、社内のセキュリティ担当などに相談してください。
出典
- Specification: Security and Trust & Safety(Model Context Protocol、2026年10月23日確認)
- Tools(Model Context Protocol 仕様、2026年10月23日確認)
- Security Best Practices(Model Context Protocol、2026年10月23日確認)
- OWASP MCP Top 10(OWASP、2026年10月23日確認)
- OWASP MCP Top 10(プロジェクトページ、OWASP、2026年10月8日確認)
- LLM06:2025 Excessive Agency(OWASP GenAI Security Project、2026年10月23日確認)
- MCP Security Notification: Tool Poisoning Attacks(Invariant Labs、2025年4月1日、2026年10月23日確認)
- GitHub MCP Exploited(Invariant Labs、2025年5月26日、2026年10月23日確認)
- CVE-2025-6514(NVD、NIST、2026年10月23日確認)
- CVE-2025-49596(NVD、NIST、2026年10月23日確認)
- Security(Claude Code Docs、Anthropic、2026年10月23日確認)
- Connect Claude Code to tools via MCP(Claude Code Docs、Anthropic、2026年10月23日確認)
- Safety in building agents(OpenAI API、OpenAI、2026年10月23日確認)
- AI security and safety(Google Cloud、Google、2026年10月23日確認)
更新履歴
-
2026年10月25日 書き方を直しました。
- 前:運営者が使っていないと読める書き方 → いま:「この記事は、実際に使って確かめた記録ではありません」。公式の資料を読んでまとめた記事で、使い心地は書いていない、という意味に直した
-
2026年10月23日 公式の資料を読み直して、次の点を直しました。
- 前:Claude Codeで承認の確認が出ない例は「クラウドのセッション」 → いま:「プロジェクトのスレッド以外のクラウドのセッション」
- 一部の出典は読めなかったため、その部分は前のままです。
