レポート 5264
GitHub MCP の脆弱性:MCP 経由でのプライベートリポジトリへのアクセス
GitHub 公式 MCP サーバーに重大な脆弱性が見つかり、攻撃者がプライベートリポジトリのデータにアクセスできてしまうことを明らかにしました。この脆弱性は、Invariant のセキュリティアナライザーによって、有害なエージェントフローを検出する際に初めて発見された脆弱性の一つです。
Invariant は、広く利用されている GitHub MCP 統合(GitHub で 14,000 スター)に影響を与える重大な脆弱性を発見しました。この脆弱性により、攻撃者は悪意のある GitHub Issue を介してユーザーのエージェントを乗っ取り、プライベートリポジトリからデータを漏洩させることが可能です。
この問題は、Invariant の自動セキュリティスキャナーによって初めて発見された脆弱性の一つで、いわゆる有害なエージェントフローを検出します。このようなシナリオでは、エージェントは操作され、データの漏洩や悪意のあるコードの実行など、意図しないアクションを実行させられます。詳細については、以下をご覧ください。
業界がコーディングエージェントやIDEの普及に躍起になっており、重要なソフトウェア開発ツールが同様の攻撃にさらされる可能性があるため、今こそこの問題への意識を高めることが非常に重要です。
攻撃のセットアップ
この攻撃のセットアップでは、ユーザーはClaude DesktopなどのMCPクライアントを使用し、GitHub MCPサーバーを自分のアカウントに接続しています。
ユーザーは以下の2つのリポジトリを作成していると想定しています。
<user>/public-repo: GitHub上の全員が問題やバグレポートを作成できる、公開リポジトリ。
<user>/private-repo: プライベートリポジトリ。例: 独自のコードや企業の非公開データなど。
GitHubの標準ルールにより、攻撃者はエージェントが操作するのを待つプロンプトインジェクションを含む悪意のある問題を公開リポジトリに作成できるようになります。
実際の攻撃は、GitHub アカウントのユーザーと所有者がエージェントに「<user>/public-repo 内のオープンな Issue を確認してください」といった無害なリクエストを送信するとすぐに開始されます。これにより、エージェントはパブリックリポジトリから Issue を取得し、インジェクションを受けます。
ここで示されているように、エージェントが悪意のある GitHub Issue に遭遇するとすぐに、プライベートリポジトリのデータをコンテキストに取り込むように強制され、攻撃者や他の誰もが自由にアクセスできるパブリックリポジトリに自律的に作成 された PR にそのデータが漏洩される可能性があります。
有害なフロー:間接的なプロンプトインジェクションによって悪意のあるツールの使用シーケンスがトリガーされるこのような手法を、有害なエージェントフローと呼びます。私たちは、Invariant のセキュリティアナライザーを GitHub MCP に適用することでこの脆弱性を発見し、実際に存在するフローの検出プロセスを自動化することができました。
攻撃のデモ
より具体的に説明するために、以下のデモリポジトリを用いてこの攻撃を実際に実装します。
- ukend0464/pacman: シンプルなパックマンゲームの実装を含むパブリックリポジトリ(こちらから入手可能)
- 個人プロジェクトとユーザーの機密情報を含む複数のプライベートリポジトリ
「作者について」インジェクション:攻撃者がアクセスできるパブリックリポジトリに、悪意のある問題を配置します。この問題には、エージェントがパブリックリポジトリの問題リストを照会するとすぐに実行されるペイロードが含まれています。
ユーザーインタラクション:攻撃をトリガーするには、ユーザーはClaude 4 Opusに「私のオープンソースリポジトリ pacman の問題を確認して対処してください!」と要求するだけです。
ClaudeはGitHub MCP統合を使用して指示に従います。このプロセス全体を通して、Claude Desktopはデフォルトで、ユーザーに個々のツール呼び出しの確認を求めます。しかし、多くのユーザーは既にエージェントの使用時に「常に許可」の確認ポリシーを選択し、個々のアクションの監視を停止しています。
攻撃の展開 エージェントは、攻撃ペイロードが見つかるまで問題リストを確認します。プライベートリポジトリのデータを意図的にコンテキストに取り込み、pacmanリポジトリのプルリクエストに漏らします。このリポジトリは公開されているため、攻撃者が自由にアクセスできます。
Claude はその後、GitHub MCP 統合を使用して指示に従います。このプロセス全体を通して、Claude Desktop はデフォルトでユーザーに個々のツール呼び出しの確認を求めます。しかし、多くのユーザーは既にエージェントの使用時に「常に許可」の確認ポリシーを選択し、個々のアクションの監視を停止しています。
攻撃の展開 エージェントは、攻撃ペイロードが見つかるまで問題リストを確認します。プライベートリポジトリのデータを意図的にコンテキストに取り込み、pacmanリポジトリのプルリクエストに漏らします。このリポジトリは公開されているため、攻撃者が自由にアクセスできます。
有害なエージェントフローの検出
MCP でこれまでに発見されたツールポイズニング攻撃とは異なり、この脆弱性は MCP ツール自体の侵害を必要としません。むしろ、完全に信頼できるツールであっても、GitHub などの外部プラットフォームに接続した際にエージェントが信頼できない情報にさらされる可能性があるため、この問題が発生します。
エージェントシステムにおけるこのような問題の理解、分析、緩和は非常に複雑な作業であり、手作業で大規模に実行することは困難です。この課題に対処するため、Invariant は有害なエージェントフローを自動的に検出する手法を開発しました。これにより、組織は悪意のある攻撃者に悪用される前に潜在的な 脅威を特定し、モデル化することができます。
...
範囲と緩和策
今回の実験は Claude Desktop に焦点を当てていますが、この脆弱性は特定のエージェントや MCP クライアントに固有のものではありません。基盤となるモデルや実装に関係なく、GitHub MCP サーバーを使用するすべてのエージェントに影響します。
重要なのは、これはGitHub MCPサーバーコード自体の欠陥ではなく、エージェントシステムレベルで対処する必要がある根本的なアーキテクチャ上の問題であるということです。つまり、GitHub単独でサーバー側のパッチを適用しても、この脆弱性を解決することはできません。
そのため、このような攻撃を防ぎ、エージェントシステムのセキュリティ体制を強化するために、以下の2つの主要な緩和戦略を推奨します。
1. きめ細かな権限制御の実装
GitHubのようなMCP統合を使用する場合は、最小権限の原則に従い、エージェントのアクセスを必要なリポジトリのみに制限することが重要です。従来のトークンベースの権限はある程度の保護を提供しますが、多くの場合、エージェントの機能を制限する厳格な制約を課します。
…
2. 継続的なセキュリティ監視の実施
予防策に加えて、潜在的なセキュリティ脅威をリアルタイムで検出し、対応するための堅牢な監視ソリューションを実装してください。エージェントとMCPシステム間のやり取りを継続的に監査するために、InvariantのMCP-scanなどの専用のセキュリティスキャナーを導入することをお勧めします。
...
結論
このブログ記事では、GitHub MCPサーバーに影響を及ぼす重大な脆弱性について説明しました。この脆弱性により、攻撃者は悪意のあるGitHub Issueを介してユーザーのエージェントを乗っ取り、プライベートリポジトリからデータを漏洩させる可能性があります。この脆弱性は、有害なエージェントフローを検出するInvariantのセキュリティアナライザーによって初めて発見された脆弱性の一つです。
...