AIエージェント・MCPの脆弱性は見たことがある
MCPの権限昇格も、プロンプトインジェクションも、実は使い慣れた脆弱性クラスの新しい姿。IDOR・IAM誤設定・SSTI・プロトタイプ汚染という「知っている形」から、AIエージェント時代のリスクの正体を読み解きます。
📋 この記事の目次
「AIエージェントの脆弱性」「MCPのセキュリティリスク」——こう聞くと、まったく新しい、得体のしれない脅威に感じるかもしれません。けれど実際にその中身を分解していくと、驚くほど「知っている形」をしています。本記事は、当サイトのCTFシリーズや実務者向けDFIRハブで既に扱ってきたIDOR・IAM誤設定・SSTI・プロトタイプ汚染という4つの脆弱性クラスを補助線に、AIエージェント/MCP特有に見える脅威の正体を読み解きます。AIエージェント/MCPセキュリティの全体像はすでに別記事で解説済みのため、本記事はその中の2つの攻撃面(権限昇格とプロンプトインジェクション)を、あなたが既に知っている脆弱性クラスの視点から深掘りする「専門編」という位置づけです。
本記事は、AIエージェント・MCPの設計や運用に関わる防御側のための教育目的の解説です。ここで紹介する構造や手口の理解は、あなた自身が開発・管理するシステムの安全性を高めるために使ってください。他者が運用するAIエージェント・MCPサーバーに対して、無断で脆弱性を検証・悪用する行為は不正アクセス禁止法等に抵触する可能性があります。
🧩 新しい脅威は、実は「見た形」をしている
パターン認識という、最強のショートカット
セキュリティの学習は、実はゼロからやり直さなくていい
新しい技術が登場するたびに、セキュリティの世界には「新しい脆弱性」が生まれたように見えます。しかしよく観察すると、根本原因はたいてい「権限チェックの不備」か「入力とロジックの境界の崩れ」という、昔からある2つの型のどちらかに収まります。AIエージェント・MCPも例外ではありません。
なぜこの「翻訳」が実務で役立つのでしょうか。理由は単純で、脆弱性診断・監査の現場は、次々に出てくる新技術を一つひとつゼロから学ぶ時間の余裕がないからです。しかし「権限チェック不備」と「入力とロジックの境界崩壊」という2つの型さえ体に染み込んでいれば、初めて見る技術(今日ならMCP、明日は別の何か)に対しても、「まずこの2つの型を疑う」という初動が取れます。本記事は、AIエージェント/MCPという具体例を通じて、その”型を疑う力”そのものを鍛える記事でもあります。
🔑 MCP権限昇格編
confused deputy・IDOR・IAM誤設定という「権限チェック不備」の家族
MCPサーバーは「誰の代わりに動いているか」を忘れやすい
MCP(Model Context Protocol)は、AIエージェントが外部ツール・データソースを呼び出すための共通規格です。便利な反面、MCPサーバーはしばしば「呼び出し元の実際のユーザー」ではなく「MCPサーバー自身が持つ強い権限」でバックエンドにアクセスします。この構造のズレこそが、権限昇格の温床です。
🧭 confused deputy構造:権限チェックが「抜け落ちる」場所
これには名前がある:confused deputy problem(混乱した代理人問題)
これは1988年から知られる古典的な概念で、「強い権限を持つプログラムが、依頼者の本来の権限を確認しないまま、依頼された操作を実行してしまう」問題を指します。OWASPのMCP Security Cheat Sheetも、MCPサーバーの権限昇格リスクをまさにこの言葉で説明しています。「AI特有の新問題」ではなく、「代理人モデルにつきものの古い問題」がAIエージェントの形で再来した、というのが実態です。
▲ 読み方:本来は「この操作を依頼した“人間”は、顧客データ全件を見る権限を持っているか」を確認すべきところ、MCPサーバーは自分自身の接続権限のまま処理を実行しています。呼び出し元の実際の認可を確認しないこの構造が、まさにIDORの「オブジェクトIDさえ指定できれば権限チェックを経ずにアクセスできてしまう」構図と同じです。
🧩 IDOR・IAM誤設定との対応関係
| 脆弱性クラス | 本来あるべき確認 | MCPでの対応する問題 |
|---|---|---|
| IDOR | 「このIDのデータは、今アクセスしている本人のものか」を毎回確認する | 「このツール呼び出しは、本当にこの権限を持つ利用者からの依頼か」を確認しない |
| IAM誤設定 | ロールには必要最小限の権限だけを与える | MCPサーバー自体に、実際の業務で必要な範囲を超えた強い権限(`scope:”ALL”`等)を与えてしまう |
MCPサーバーがOAuth等で認証を行っていても、それは「誰かが正規にログインした」ことを確認しているだけで、「AIエージェントが今まさに行おうとしている個別の操作を、その人物が本当に承認しているか」の確認とは別問題です。静的なクライアントIDの使い回しや、リクエストごとの同意確認の欠如は、認証があってもconfused deputy問題が起きる典型パターンとして知られています。
CTFでIDOR(CTF実践編②)やIAM誤設定(CTF上級編⑥)を解いたことがある方は、この時点で「あ、あの時のパターンだ」と気づいたはずです。実際に、体験型教材「AIエージェント監査官」のケース④は、パストラバーサル型の権限昇格をMCPの文脈で再現しています。
🧠 プロンプトインジェクション編
SSTI・プロトタイプ汚染という「データがコードになる」家族
「データのつもり」が「命令」や「ロジック」に化ける
SSTI(サーバーサイド・テンプレートインジェクション)は、テンプレートエンジンに渡した入力がテンプレート構文として解釈され、コード実行に至る脆弱性。プロトタイプ汚染は、入力データがObject.prototypeを経由してアプリ全体のロジック(権限判定を含む)を書き換えてしまう脆弱性。どちらも根っこは同じで、「ただのデータ」のつもりで渡した入力が、実は「コード」や「ロジック」として実行・解釈されてしまうという構造です。プロンプトインジェクションは、この家族の最新メンバーです。
🔒 構文的な壁 vs 意味論的な境界
▲ SQLは「?」という構文的な壁でコードとデータを分離できますが、LLMのプロンプトは両方とも同じ自然言語の文字列です。これが「プリペアドステートメントのようなプロンプトインジェクション対策は存在しない」と言われる理由です。
正直に言うと、SSTIほど”完全に塞げる”わけではない
SSTIは、ロジックレスなテンプレート言語への切り替えやサンドボックス化など、構造的な対策でほぼ根絶できます。プロンプトインジェクションの境界は構文ではなく意味(セマンティクス)にあるため、同じようにはいきません。NIST(米国国立標準技術研究所)の敵対的機械学習の分類でも、プロンプトインジェクションはNISTAML.018として独立した攻撃タイプに位置づけられています。「似ているが、根絶の難易度は違う」という誠実さが、この記事で一番伝えたいことです。
それでも、SSTI対策の考え方から転用できるヒントはあります。SSTIでは「テンプレートエンジンの権限を最小化する」「危険な関数を呼べないサンドボックス環境で実行する」という設計が有効でした。AIエージェントでも同様に、「LLM自身が直接コードやコマンドを実行できないようにする」「ツール呼び出しの結果を鵜呑みにせず、実行前に別レイヤーで検証・承認を挟む」という多層防御の発想は、そのまま生きています。「入力とコードを完全に分離できない」からこそ、分離できない前提で周囲を固める、という考え方の転換が要になります。
🧬 プロトタイプ汚染との対応関係
| 脆弱性クラス | 何が書き換えられるか | AIエージェントでの対応物 |
|---|---|---|
| SSTI | テンプレート構文経由でサーバー側のコードが実行される | ツールの応答・Webページに紛れた指示をAIが「命令」として解釈する(間接プロンプトインジェクション) |
| プロトタイプ汚染 | __proto__経由でアプリ全体のロジック(権限判定含む)が書き換わる | 悪性ツールの応答が、AIの「次にとる行動」の判断ロジックそのものを書き換える |
CTFでSSTI(CTF上級編③)やプロトタイプ汚染(CTF実践編④)を解いたことがある方なら、「入力を信頼しすぎるとロジックごと乗っ取られる」という感覚はすでに馴染みのはずです。体験型教材「AIエージェント監査官」のケース①(Web要約経由の間接プロンプトインジェクション)・ケース③(悪性MCPサーバーの天気ツール)は、まさにこの構造を再現しています。より詳しい間接プロンプトインジェクションの技術的な仕組みは実践編を参照してください。
📊 脆弱性クラス対応表
何が同じで、何が違うのかを一覧で整理する
🧭 見慣れた脆弱性クラス ↔ AIエージェント/MCPでの正体
| 脆弱性クラス | 根本原因 | AIエージェント/MCPでの対応物 | 技術的に完全に塞げるか |
|---|---|---|---|
| IDOR | オブジェクトIDを直接指定でき、権限チェックを経ない | MCPサーバーが呼び出し元の実際の権限を検証せず、自分の権限で処理する | ◎ 検証を実装すれば塞げる |
| IAM誤設定 | 過剰な権限やAssumeRoleの誤設定 | MCPサーバー自体に必要以上の権限が付与されている | ◎ 最小権限の設計で塞げる |
| SSTI | テンプレート構文への入力がコードとして実行される | ツール応答に紛れた指示をAIが命令として解釈する(間接プロンプトインジェクション) | △ 軽減はできるが根絶は困難 |
| プロトタイプ汚染 | 入力がアプリ全体のロジック(権限判定含む)を書き換える | 悪性ツール応答がAIの行動判断ロジックそのものを書き換える | △ 同上 |
※「技術的に完全に塞げるか」は執筆時点(2026年)の一般的な見解に基づく目安です。
◎と△の違いこそが本質
権限系(IDOR・IAM誤設定に対応するもの)は「設計・実装の問題」なので、検証ロジックを正しく実装すれば構造的に塞げます。一方データ/コード境界系(SSTI・プロトタイプ汚染に対応するもの)は、LLMという技術そのものの性質に近いため、多層防御(権限の最小化・出力の検証・人間の承認)でリスクを下げる以外に、現状は決定打がありません。この違いを理解しておくと、「対策すれば終わり」なのか「継続的な警戒が要る」なのかの見分けがつきます。
🧭 この記事の視点で見直すチェックリスト
- MCPツールを呼び出すたびに、呼び出し元の実際の権限を検証しているか(IDOR対策の定石と同じ発想)
- MCPサーバー自体に、業務上必要な範囲を超えた権限を与えていないか(IAM誤設定の裏返し)
- 外部ツールの応答・Webページの内容を、AIに「そのまま命令として」渡していないか(SSTIのサンドボックス化と同じ発想)
- AIエージェントに重要な操作(送金・削除・外部送信等)をさせる前に、人間の承認ステップを挟んでいるか
- OAuth等の認証があっても、リクエスト単位の同意確認まで実装できているか(「認証済み」と「今の操作への同意」は別物)
🎮 実践編:ゲームとCTFで確かめる
読んだ知識は、手を動かして初めて自分のものになる
ここまでの対応関係は、文章で読んだだけではまだ「知識」のままです。実際に自分の手で「これは承認すべきか、ブロックすべきか」を判断してみると、パターン認識が体に入っていきます。以下のゲームとCTFシリーズは、いずれも当サイトの体験型教材として無料で遊べます。
AIエージェント監査官
AIが実行しようとしている行動を「承認」か「ブロック」か判定する全10ケース。間接プロンプトインジェクション・悪性MCPサーバー・権限昇格など、本記事で扱った構造をそのまま体験できます。
今すぐ監査官になる →CTF上級編③(SSTI) / 実践編④(プロトタイプ汚染)
「入力がコード・ロジックに化ける」家族を、安全な再現環境で体験できる2話。プロンプトインジェクションの理解の土台になります。
📚 まとめ・FAQ・次に読む
「知っている形」に気づけば、新しい脅威も怖くない
①MCPの権限昇格は、権限チェック不備という意味でconfused deputy問題・IDOR・IAM誤設定と同じ形。②プロンプトインジェクションは、「入力がコード/ロジックに化ける」という意味でSSTI・プロトタイプ汚染と同じ家族。③ただし権限系は設計で塞げるが、データ/コード境界系はLLMの性質上、多層防御でリスクを下げ続けるしかない。
結局、MCPサーバーは危険ということですか?
プロンプトインジェクションを完全に防ぐ方法はまだ無いのですか?
IDORやSSTIを知らなくても、この記事は理解できますか?
confused deputy problemは、AIエージェントのために新しく作られた概念ですか?
この記事で紹介した対応関係は、どの程度一般的な見解ですか?
AIエージェント/MCPセキュリティ2026
7つの攻撃面を網羅する全体像。本記事はこの中の2つを深掘りする専門編です。
AIエージェント/MCP完全ガイド
MCPの基本概念からツールポイズニング・ラグプルまで幅広く解説。
プロンプトインジェクション完全ガイド
直接型・間接型の基礎から専門家の見解、対策の優先順位まで。
間接プロンプトインジェクション実践編
Web・メール・PDFに潜む「見えない命令」の技術的な仕組みを深掘り。


コメント