AI エージェントの普及は、新たなセキュリティリスクの登場でもあります。GitHubが公開している 公式の GitHub MCP(Model Context Protocol)サーバー でさえも、悪意のある GitHub Issue を通じて AI エージェントを操作し、プライベートリポジトリの情報を盗み取る脆弱性が発見されました。
この記事では、Invariant Labs が発見したこの「Toxic Agent Flows」と呼ばれる攻撃手法について解説し、対策方法について考えます。
GitHub MCP とは何か
GitHub MCP(Model Context Protocol)は、Claude Desktop などの AI エージェントが GitHub のリポジトリやイシューにアクセスするためのプロトコルです。開発者はこれを使うことで、AI エージェントに「リポジトリの Issue を確認して」「コードをレビューして」といった指示を出すことができます。
GitHub MCP サーバーは GitHub 上で 14,000 スターを獲得している人気の高いオープンソースプロジェクトで、既に多くの開発者が利用しています。
「悪意のある Issue 」で引き起こす情報漏洩
今回発見された脆弱性は、以下のような手順で攻撃が実行されます。
攻撃の前提条件
まず、攻撃を理解するために前提となる状況を整理してみましょう。
ユーザーが以下の二つのリポジトリを持っているとします。
-
パブリックリポジトリ(
user/public-repo
):誰でもアクセス可能で、Issue も自由に作成できる -
プライベートリポジトリ(
user/private-repo
):重要なコードや機密情報が含まれている
攻撃者は パブリックリポジトリに新しい Issue を作成します。そこに「悪意のあるプロンプト」を仕込むのです。
攻撃の実行手順
攻撃は非常にシンプルな流れで実行されます。
ステップ 1:悪意のある Issue の作成
攻撃者がパブリックリポジトリに、一見普通に見える Issue を作成します。しかし、その Issue には AI エージェントを操作するための特殊な指示(プロンプトインジェクション)が含まれています。
ステップ 2:ユーザーの無害なリクエスト
ユーザーが AI エージェントに対して、「パブリックリポジトリの Issue を確認して」という普通のリクエストを送信します。これは開発者にとって日常的な作業です。
ステップ 3:AI エージェントの操作
AI エージェントがパブリックリポジトリの Issue 一覧を取得する際、悪意のある Issue に含まれる指示を「正当な命令」として解釈してしまいます。
ステップ 4:プライベート情報の漏洩
操作された AI エージェントが、プライベートリポジトリから機密情報を取得し、パブリックリポジトリに新しいプルリクエストとして公開してしまいます。
攻撃デモ:Pacman リポジトリケース
実際にこの攻撃を検証するため、以下の環境でデモンストレーションを行いました。
使用された環境
-
パブリックリポジトリ:
ukend0464/pacman
(シンプルなパックマンゲームの実装) - プライベートリポジトリ: 複数の個人プロジェクトと機密情報を含むリポジトリ
- AI エージェント: Claude 4 Opus
攻撃の実行
研究者たちは pacman リポジトリに「About The Author」というタイトルの悪意のある Issue を作成しました。この Issue は一見普通の質問のように見えますが、実際には AI エージェントを操作するためのプロンプトインジェクションが含まれていました。
ユーザーが「パブリックリポジトリの Issue を見てください」とリクエストすると、AI エージェントは以下の情報を漏洩させたとのことです。
- プライベートリポジトリ「Jupiter Star」の存在
- ユーザーの南米への移住計画
- ユーザーの給与情報
「そんなんGithubに置かんやろ」というツッコミはありますが
Github以外のMCPサーバーを併用しているケースでは、そちらから情報が漏れる可能性も考えておいたほうがいいでしょう
これらの機密情報は、パブリックリポジトリのプルリクエストとして公開され、攻撃者が自由にアクセスできる状態となりました。
なぜ AI エージェントは騙されるのか
この攻撃が成功する理由は、AI エージェントの根本的な特性にあると考察されています。
コンテキストの混同
AI エージェントは、与えられた情報を「信頼できるソース」として扱います。GitHub のパブリックリポジトリは正当なプラットフォームであるため、そこに含まれる Issue の内容も「正当な指示」として解釈してしまうのです。
プロンプトインジェクション
悪意のある Issue には、AI エージェントを操作するための指示が巧妙に埋め込まれています。AI エージェントは、この指示を元のユーザーリクエストの一部として処理してしまいます。
「Toxic Agent Flows」
Invariant Labs は、この攻撃パターンを「Toxic Agent Flows」と名付けました。これは、AI エージェントが間接的なプロンプトインジェクションによってツールが使用される現象を指します。
従来の攻撃との違い
従来の「Tool Poisoning攻撃」は、MCP ツール自体に仕込まれた攻撃でした。しかし、Toxic Agent Flows では、完全に信頼できるツールを使用していても攻撃が成立するという点が新しい脅威となっています。
自動検出システムの開発
Invariant Labs は、これらの脅威を自動的に検出するセキュリティアナライザーを開発しましたとのことです。
対策方法
この脆弱性から身を守るために、以下の二つの主要な対策が推奨されています。
1. 細分化された権限制御の実装
AI エージェントには、作業に必要最小限のリポジトリアクセス権限のみを付与します。トークンベースの権限管理だけでは柔軟性に欠けるため、動的なセキュリティレイヤーを実装すべきでしょう。
2. 継続的なセキュリティ監視の実装
予防措置に加えて、潜在的なセキュリティ脅威をリアルタイムで検出し、対応するための監視ソリューションを実装します。
Invariant は MCP-scan などの専門的なセキュリティスキャナーを展開しているそうです。
モデルアライメントだけでは不十分な理由
今回の研究で特に注目すべき点は、最先端の高度にアライメント調整された AI モデルでも、この攻撃に対して脆弱であることが証明されたことです。今回の検証では非常に新しく、高度にアライメント調整された安全な AI モデルである Claude 4 Opus が使用されました。その堅牢な安全性トレーニングにもかかわらず、エージェントは比較的単純なプロンプトインジェクションによる操作に対して依然として脆弱でした。
他のプラットフォームでも発生する類似攻撃
今回発見された脆弱性は GitHub MCP に特有のものですが、類似の攻撃は他の設定でも次々と出現しています。
例えば、Legit Security は最近、GitLab Duo における脆弱性を報告しており、リモートプロンプトインジェクション攻撃の可能性を指摘しています。これは、AI エージェントを活用するプラットフォーム全体で共通する課題であることを示しています。
まとめ:AI エージェント時代のセキュリティ意識
この脆弱性の発見は、AI エージェントが広く普及する現在において、従来のセキュリティ対策だけでは不十分になることを示唆しています。
重要なポイント
- 信頼できるツールを使用していても攻撃は成立する可能性がある
- 最新の AI モデルでも間接的なプロンプトインジェクションに脆弱である
- システムレベルでのセキュリティ対策が必要
AI エージェントは開発作業を大幅に効率化してくれるツールで、使わなければ競争力を失うでしょう。適切な対策を講じながら、AI エージェントの恩恵を安全に享受できる環境を構築したいですね。
参考資料
- GitHub MCP サーバー - GitHub公式のMCPサーバー実装(14k+ スター)
- Invariant Labs - MCP-scan - MCPセキュリティスキャナー
- Invariant Guardrails - AIエージェント用ガードレール
- Claude 4 Opus - Anthropic社の最新AIモデル
関連記事
- Introducing MCP-Scan - MCP-Scanの紹介記事
- MCP Security Notification - Tool Poisoning攻撃について