AIセキュリティ企業Adversa AIは2026年10月6日、GitHub Copilot CLIに対して「Cryptographic Context Injection(CCI)」と呼ぶ手法を用い、開発者端末上の秘密情報を読み取り、外部へ送信させる攻撃を実証したと公表しました。
検証では、GitHub Copilot CLIをAutopilotモードで実行し、攻撃者が管理するWebページを読み込ませることで、暗号化された指示をCLI自身に復号させました。その後、.env.prodに保存されていた秘密情報を読み取り、攻撃者のエンドポイントへ送信するまでの一連の処理が28秒で完了したとしています。
ただし、これはGitHubがCVEやSecurity Advisoryとして公表した脆弱性ではありません。
Adversa AIによると、同社は9月17日にGitHubのBug Bountyへ報告し、GitHub側は挙動を確認したものの、「ユーザーが攻撃者管理コンテンツの取得を明示的に依頼し、Copilotへ自律動作のためのフル権限を与えたケース」として、脆弱性には該当しないと判断しました。
そのため本件は、「GitHub Copilot CLIに公式確認済みの脆弱性が存在する」と断定するのではなく、Autopilotで外部コンテンツを処理するAIコーディングエージェントにおける間接的プロンプトインジェクション/エージェント権限管理の問題として捉える必要があります。
GitHub Copilot CLIのCCI攻撃のサマリー
- Adversa AIが2026年10月6日、GitHub Copilot CLIに対するCryptographic Context Injection(CCI)を公表
- 攻撃者が管理するWebページ上の悪意ある指示を暗号化してAIの入力へ混入
- GitHub Copilot CLI自身に暗号文を復号させ、復号後の内容を命令として処理させる
- 検証ではローカルの
.env.prodファイルを読み取らせた - 読み取った内容を攻撃者管理の外部エンドポイントへ送信
- Adversa AIの検証では一連の処理を28秒で完了
- 攻撃成立にはCopilot CLIのAutopilotモードと、攻撃指示を受け入れるモデルが必要
- 通常のプレーンテキストによる同内容の指示はプロンプトインジェクションとして拒否された
- Microsoftの
mai-code-1.1-flashでは研究者の試行の50%で攻撃チェーンが成立 - 同じペイロードを使用した2種類のGPT-5.6モデルは研究者の検証では拒否
- Autoによるモデル選択では、利用者がどのモデルへルーティングされるか把握できない場合がある
- Adversa AIは9月17日にGitHub Bug Bountyへ報告
- Adversa AIによるとGitHubは挙動を確認したが脆弱性としては扱わなかった
- CVE、GHSA、修正版バージョンは公表されていない
- 具体的な攻撃ペイロードは悪用防止のため研究者も公開していない
Cryptographic Context Injectionとは
Cryptographic Context Injection(CCI)は、悪意ある命令を平文ではなく暗号化した状態でAIエージェントへ渡し、エージェント自身の実行環境で復号させる手法です。
一般的なプロンプトインジェクション対策では、AIへ入力される文章を解析し、
- 秘密情報を送信する
- システムの指示を無視する
- ファイルを読み取る
- 外部URLへデータを送る
といった不正な命令を検出します。
しかしCCIでは、その段階では悪意ある命令が暗号文になっています。
Adversa AIは、静的なコンテンツフィルターは暗号文そのものを実行して内容を確認しないため、悪意ある指示がAIの実行環境で復号されるまで検出できない点を問題視しています。
復号された指示は、単なる外部コンテンツではなく「エージェントが自ら実行した処理の結果」としてコンテキストへ戻るため、AIが信頼度の高い情報として扱う可能性があります。
一般的な直接・間接プロンプトインジェクションの仕組みは、プロンプトインジェクションとは?直接・間接攻撃の仕組みと企業の対策で整理しています。
攻撃者管理のWebページをCopilot CLIに読み込ませる
Adversa AIの検証では、利用者がGitHub Copilot CLIをプロジェクトディレクトリで実行し、外部Webページを確認するよう依頼するところから攻撃が始まります。
攻撃者が管理するページには、
- 暗号化されたコンテンツ
- 復号処理を実行するための指示
- 2つの復号キー候補
が含まれていました。
2つのうち1つは正常なキーですが、もう1つはローカルファイルの内容を読み取らなければ完成しないテンプレートとして用意されています。
Copilot CLIは復号処理を行う準備として、対象となるローカルファイルを読み、その内容をキー文字列へ組み込みました。
研究者は、この段階でローカル情報の取得が発生すると説明しています。
.env.prodの内容を読み取り外部へ送信
Adversa AIは検証対象として.env.prodファイルを利用しました。
.env系ファイルには開発環境によって、
- APIキー
- データベース接続情報
- クラウド認証情報
- 外部サービスのトークン
- アプリケーションの秘密鍵
などが保存される場合があります。
研究者の攻撃シナリオでは、テンプレート化された偽の復号キーを準備する過程で.env.prodを読み取りました。
偽キーによる復号は意図的に失敗します。
その後Copilot CLIが正しいキーを利用すると暗号化された第二段階の指示が復号され、追加情報を取得するという名目で別のURLへアクセスします。
そのリクエストのパラメーターへ、すでに取得したファイル内容が含まれることで、攻撃者側へ秘密情報が送られる構成です。
具体的なペイロードや再現コードは、Adversa AIも公開していません。
28秒で情報送信、画面上では外部送信が分かりにくい
Adversa AIによると、検証では外部Webページを読み込ませてから.env.prodの内容が攻撃者側へ到達するまで28秒でした。
研究者は、操作履歴上では、
- どの外部ホストへ秘密情報が送られたか
- ローカルファイルの内容が外へ出たこと
が利用者に明確に示されなかったとしています。
最終的なCopilot CLIの説明も、研究者の意図した攻撃内容とは異なる正常な処理のように表示されたとしています。
AIエージェントでは、最終回答だけを監査しても、途中で実行されたツール操作やネットワーク通信を確認できない場合があります。
AutopilotではCopilotへローカル環境の操作権限を与える
GitHub公式ドキュメントによると、Copilot CLIのAutopilotモードは、利用者がCopilotへフル権限を与え、ローカルマシン上でタスクを自律的に実行させる機能です。
通常の対話モードでは、ファイル変更やシェルコマンド、URLアクセスなどの操作に対して承認を求めることがあります。
一方、Autopilotでは初期タスクを渡した後、Copilotがタスク完了まで複数の処理を自律的に継続します。
GitHubは公式ドキュメントでも、自動承認を利用した場合、Copilotがユーザーと同じ権限でファイルへアクセスし、シェルコマンドを実行できる点に注意を促しています。
今回のCCIは、このAutopilotの自律実行能力と外部コンテンツ処理が組み合わさることで成立しました。
すべてのモデルで成立したわけではない
Adversa AIの検証で、同じ攻撃ペイロードに対する挙動はモデルごとに異なりました。
研究者による結果は次の通りです。
| モデル | Adversa AIの検証結果 |
|---|---|
Microsoft mai-code-1.1-flash |
試行の50%で攻撃チェーンを実行 |
| GPT-5.6系モデル 2種類 | 同一ペイロードをすべて拒否 |
つまり、「GitHub Copilot CLIを使えば必ず情報が盗まれる」という結果ではありません。
攻撃の成立には、
- Autopilotモード
- 外部の攻撃者管理コンテンツを取得
- ローカルファイルを読み取れる権限
- 外部ネットワークへ通信できる権限
- 悪意ある指示を拒否しないモデル
という複数の条件が必要です。
Autoモデル選択ではセキュリティ挙動が変わる可能性
Adversa AIが問題視しているもう一つの点が、モデルの自動ルーティングです。
研究者が利用した有料アカウントでは、攻撃が成立したmai-code-1.1-flashは手動で選択する必要がありました。
一方、別のアカウントでモデル選択をAutoにすると、セッションによって攻撃を拒否するモデルと、攻撃チェーンを実行するモデルの双方へルーティングされたとしています。
利用者から見ると同じCopilot CLI・同じAutopilot操作であっても、裏側で選択されたモデルによってプロンプトインジェクション耐性が変化する可能性があります。
AIエージェントのセキュリティを「モデル自身が悪意ある指示を拒否できるか」だけに依存させることが難しい理由の一つです。
GitHubは脆弱性として扱わず
Adversa AIは2026年9月17日、今回の挙動をGitHubのBug Bountyプログラムへ報告しました。
研究者によると、GitHubのトリアージチームは挙動を確認しましたが、10月1日時点で脆弱性には該当しないと判断しました。
Adversa AIが紹介しているGitHub側の説明では、
「ユーザーがCopilot CLIへ攻撃者管理コンテンツの取得を明示的に依頼し、Copilotへ自律的に動作するフル権限を与えていた」
ことが理由とされています。
GitHubは将来的に機能をより厳格にする可能性には言及したものの、発表できる変更はないと回答したと研究者は説明しています。
このGitHub側の判断は、GitHubが公開したSecurity Advisoryではなく、Adversa AIがBug Bounty対応内容として公開したものです。
2026年10月8日時点で、本件に対応するCVEやGHSA、修正版バージョンは公表されていません。
「脆弱性」よりAIエージェントの信頼境界の問題
本件ではGitHubと研究者でリスク評価が分かれています。
GitHub側の考え方では、Autopilotにフル権限を与え、ユーザー自身が外部ページの取得を依頼した以上、その権限の範囲内で発生した挙動と捉えられます。
一方、Adversa AIは、
- 平文では拒否される悪意ある指示が暗号化すると通過する
- 利用者に情報送信先が明確に表示されない
- ファイルが外部送信されたことを利用者が把握しづらい
- Autoモデルルーティングによって結果が変化する
点を問題としています。
これは従来のソフトウェア脆弱性だけでは整理しにくい、AIエージェントの「何を命令として信頼するか」という信頼境界の問題です。
Webページ、Issue、メール、MCPレスポンスなど外部から取得した情報を、AIがそのまま指示として扱える状態にすると、間接的プロンプトインジェクションによる操作誘導につながります。
セキュリティ対策Labでは、WebコンテンツからAIエージェントを操作する同種の問題をAIエージェントを狙う間接的プロンプトインジェクションでも整理しています。
外部コンテンツを読むコンテキストと秘密情報へアクセスするコンテキストを分離
Adversa AIは対策として、単に悪意ある文字列を検出するのではなく、AIエージェントが実行する一連の操作を監視する必要があるとしています。
今回の攻撃では、
- 信頼できないWebコンテンツを読み込む
- コードを実行する
- ローカルファイルを読む
- 新しい外部ホストへ通信する
という一連の流れが発生しました。
個別の操作だけを見ると正常な処理に見える可能性があります。
そのため、
- 外部コンテンツ取得後のファイルアクセス
- 秘密情報を読み取った後の外向き通信
- 通常利用しないドメインへのアクセス
- ワークスペース外のファイル読み取り
などを組み合わせて検知する必要があります。
Copilot CLI利用企業が確認したい対策
GitHub Copilot CLIや他のAIコーディングエージェントを企業で利用している場合、次の項目を確認できます。
- Autopilotを常時利用する必要があるか
- 外部Webサイトの取得をAutopilotへ許可する必要があるか
- Copilot CLIから接続できる外部ドメインを制限できるか
- ワークスペース外のファイル読み取りを制限できるか
.env、秘密鍵、クラウド認証情報を開発端末へ平文保存していないか- AIエージェントを管理者権限で実行していないか
- AIエージェント専用の最小権限アカウントを利用できるか
- 外部通信前に承認を要求する運用へ変更できるか
- ツール呼び出しの実引数までログとして保存しているか
- どのファイルを読み、どのURLへ通信したか後から追跡できるか
- Autoルーティングされるモデルごとの差をセキュリティ評価しているか
- 外部Webページ、Issue、PR、チケット、MCP応答を信頼できない入力として扱っているか
GitHub公式ドキュメントでも、Copilot CLIはシェルコマンド、ファイル読み書き、Webアクセスなど強い権限を持つため、信頼するディレクトリやツール権限を制御するよう案内しています。
AIエージェント全体の権限管理や間接的プロンプトインジェクションを含む企業向けの確認事項は、AIエージェントのセキュリティ 6つのリスクと対策で整理しています。








