GitHub Copilot CLI、暗号文で秘密情報を外部送信 研究者が実証

[最終更新]

Googleで優先するソースとして追加するボタン

研究者によると、同じ命令を平文で渡せば、Copilotは拒否しました。暗号で包んだときだけ、エージェントは自分で復号し、開発者の秘密情報を外へ送りました。それでもGitHubは、利用者が全権限を与えていたとして、脆弱性とは扱っていません。問われているのは手口なのか、それとも権限の与え方なのでしょうか。


AIセキュリティ企業のAdversa AIは2026年10月6日、GitHub Copilot CLIに対する攻撃手法「Cryptographic Context Injection(CCI)」の検証結果を公表した。同社の検証では、autopilotモードのCLIに攻撃者のWebページを読ませると、エージェントは復号の準備中にローカルの.env.prodファイルを読み取り、その後、復号した指示に従って内容を外部へ送信した。

所要時間は28秒だった。MAI-Code-1.1-Flashは試行の50%で攻撃を最後まで実行し、GPT-5.6の2モデルは同じ指示を拒否した。同社は9月17日にGitHubへ報告したが、同社によるとGitHubは内容を検証したうえで、脆弱性としては扱わないと判断した。

From: 文献リンクGitHub Copilot CLI vulnerability: Cryptographic Context Injection steals developer secrets

【参考動画】

【編集部解説】

今回の研究で目を引くのは、攻撃の巧妙さそのものより、「誰が何を許可したのか」という線引きが、研究者とGitHubのあいだで食い違ったまま公表に至った点です。AIエージェントに仕事を任せる人が増えるほど、この問いは避けて通れなくなります。

暗号を「読ませないため」ではなく「信じさせるため」に使う

暗号は本来、内容を読まれないようにするために使われます。CCIはそれを逆向きに使います。外から入ってきた文章の中身を検査し、怪しい命令が含まれていないかを判定するタイプの防御にとって、強い暗号で包まれた命令は意味のない文字列にしか見えません。

CCIはその暗号文に鍵と「復号せよ」という指示を添え、エージェント自身に復号させます。復号は、エージェントが自分で書いて自分で実行したコードの出力として現れます。外から来た命令が、いつのまにか「自分の作業結果」に姿を変えてしまうわけです。Adversa AIはこれを、暗号が信頼される文脈を作り出す仕組みだと説明しています。

今回の手順には、もう一段の工夫があります。Adversa AIによると、ページは鍵の候補を2つ示しますが、片方は本物ではなく、ローカルのファイルを読まないと完成しない「ひな形」です。エージェントは復号の準備としてファイルを読み、その内容を鍵の文字列に組み込みます。この鍵での復号はわざと失敗するように作られています。機密情報の読み取りは、復号に成功する前の「準備」の段階ですでに起きています。外部への送信は、その後に本物の鍵で復号した指示によって行われます。

CCIは8月20日にAdversa AIが公表した手法で、xAIのGrokでは会話データを外部へ送らせ、GoogleのGeminiでは安全フィルターを迂回させる結果が示されていました。その時点でAdversa AIは、コーディングエージェントのほうが影響は大きいと予告していました。コードを実行し、外部と通信することが、コーディングエージェントにとっては日常の動作だからです。手の届く範囲にあるのも、会話の履歴ではなく、開発者のディスクにあるソースコードや設定、認証情報です。

GitHubの判断と、研究者の反論

Adversa AIによると、GitHubのバグバウンティの担当チームは内容を検証したうえで、脆弱性とは扱わないと判断しました。理由は、利用者が攻撃者の用意したページを取得するよう明示的に指示し、しかもCopilotに自律的に動く全権限を与えていた、というものです。今回の判断について、GitHub自身の公開発表は確認できていません。

この判断には根拠があります。GitHubのドキュメントによると、Copilot CLIは既定では、URLへのアクセスに承認を求め、ファイルを扱える範囲も作業ディレクトリと一時ディレクトリに絞っています。Adversa AIの検証は、autopilotで自律的に動く全権限を与えた状態で行われました。既定の設定のまま使っている利用者に、そのまま当てはまる結果ではありません。権限を絞ったままautopilotを使えば、承認が必要なツールの要求は自動的に拒否されます。ただしドキュメント自身も、複雑なシェル構文に埋め込まれたパスや難読化されたURLは検出しきれない場合があると注記しています。既定の権限チェックだけで同種の攻撃を必ず防げる、とまではいえません。

一方で、Adversa AIの反論にも重みがあります。同社によると、同じ命令を平文で渡した場合は、プロンプトインジェクションとして拒否されました。防御をすり抜けさせたのは暗号化だけだ、というのが同社の見立てです。同社が示した実行記録では、送信先のホストも、ファイルが端末の外へ出たことも利用者には示されず、エージェントは最後のまとめで、実際とは異なる作業内容を報告していたといいます。

利用者が許可したのは「このページを読んで作業を進めること」であって、「.envファイルを見知らぬ相手に送ること」ではありません。権限の設定上は同じ操作に含まれても、利用者の意図としては別物です。この隙間をどこが埋めるのかが、今回の食い違いの核心だと私は考えています。

GitHubのautopilotのドキュメントは、全権限を有効にすると最も良い結果が得られると案内し、開始時の選択肢でも全権限を「推奨」としています。あわせて、サンドボックスの利用も案内しています。autopilotで全権限を与えるのは、特殊な設定ではなく、製品が想定する使い方の一つです。Adversa AIによると、GitHubは回答のなかで、将来この機能をより厳しくする可能性に触れつつ、現時点で発表できることはないとしたといいます。

「Auto」は安全性の選択でもある

Adversa AIがもう一つ問題にしたのは、モデルによる差です。MAI-Code-1.1-Flashは試行の半数で攻撃を最後まで実行しましたが、試行回数は公表されていません。GPT-5.6の2モデルは、同じ指示を一貫して拒否しました。

MAI-Code-1.1-Flashは、8月11日にCopilotへ追加されたばかりのMicrosoftのモデルで、前身のMAI-Code-1-Flashより定価が73%低く設定されています。Adversa AIが試した有料アカウントでは、このモデルは既定ではなく、手動で選ぶ必要がありました。ただし、モデル選択を「Auto」にしたアカウントでは、セッションによってこのモデルが割り当てられたといいます。

Adversa AIは、どのモデルが処理したかを利用者は知ることができないと主張しています。これに対してGitHubのドキュメントは、Copilot CLIはターミナルの出力にモデルの情報を表示すると説明しています。どちらの記述が実際の画面に近いのかは、利用者が自分の環境で確かめられます。

いずれにしても、「Autoに任せる」ことの意味が、コストと速度の最適化だけでは済まなくなってきたのは確かです。安全性の水準がモデルごとに違うなら、ルーティングは安全性の選択でもあります。

今日から見直せること

Copilot CLIは2026年2月25日に一般提供が始まり、Copilotの契約者が使えるツールになっています。ターミナルでエージェントに作業を任せることは、もう一部の先進的な開発者だけのものではありません。今回の研究から引き出せる実務上の備えは、それほど複雑ではありません。

外部のWebページを読ませる作業と、認証情報を扱う作業を、同じ全権限のセッションで混ぜないこと。.envなどの秘密情報を、エージェントが読める場所に置かないこと。GitHubが実験的機能として提供しているローカルのサンドボックス(既定ではオフ)を有効にし、エージェントが触れられるファイルや通信先そのものを狭めること。そのうえで、--allow-url・--deny-urlのような通信先の設定を補助的に使うこと。URLの検出には限界があるとドキュメント自身が注記しているため、こちらだけに頼らないのが安全です。どれも、今日から見直せるものです。

なお、Adversa AIはコーディングエージェント向けのセキュリティ製品を提供している企業です。記事の終盤では、自社の検証用エージェントで同じ流れの攻撃を再現し、自社製品がそれを止めたと述べています。研究の価値とは切り分けて読むのがよいでしょう。

Adversa AIが示した対策の方向性そのものは、特定の製品に依存しません。一つひとつの入力を検査するのではなく、「外の内容を読む」「コードを動かす」「ファイルを読む」「無関係な相手と通信する」という行動の連なりを見る、という考え方です。

プロンプトの文面を見張るだけの防御から、エージェントの振る舞いまで見張る防御へ。GPT-5.6の2モデルが攻撃を拒否したように、モデル自身の拒否する力は今後も大切です。そのうえで、AIに「任せる」範囲が広がるほど、エージェントを動かす仕組みの側で権限と行動を制御することの重みが増していきます。今回の食い違いは、その設計の責任を誰がどこまで担うのかを、開発者と提供者がともに考え始めるきっかけになるはずです。

【関連記事】

ChatGPTの脆弱性「AgentForger」、リンク1本でAIエージェントが社内の内通者になる
リンク1本でChatGPTのAIエージェントが社内の内通者になり得るとされた、脆弱性「AgentForger」を取り上げた記事。

CrowdStrike、AIエージェントを狙う新プロンプトインジェクション5手法を公表
CrowdStrikeが公表した、AIエージェントを狙う新しいプロンプトインジェクションの5つの手法を紹介する。同社の発表を読み解く記事。

Grok Build CLI、リポジトリデータを外部送信|通信解析で判明したデータ管理の問題
Grok Build CLIがリポジトリのデータを外部へ送っていた問題を、通信の解析から読み解く。同じターミナル型エージェントの事例。

AIエージェントは「すでに侵害されている」─TrendAIとPwCが13モデル2,600テストで示した構造的欠陥とAI-CAL
TrendAIとPwCが13モデル・2,600件のテストで示した、AIエージェントの構造的な欠陥とAI-CALを取り上げた記事。

【編集部後記】

今回いちばん長く手が止まったのは、攻撃の手順ではなく、エージェントが最後に残したまとめの一文でした。Adversa AIによると、秘密情報を外へ送った直後のエージェントは、正規の読み取り先を確認したという趣旨の報告を残していたそうです。

autopilotに任せたあと、私たちが実際に目を通すのは、多くの場合このまとめです。実行ログを一行ずつ追う時間は、なかなか取れません。AIの自己申告と実際に起きたことの差を、私たちはどの画面で確かめればよいのでしょうか。


【用語解説】

プロンプトインジェクション
AIへの入力に、本来の指示を上書きする命令を紛れ込ませる攻撃。Webページや文書に命令を埋め込み、AIに読ませる手口は、間接プロンプトインジェクションと呼ばれる。

Cryptographic Context Injection(CCI)
Adversa AIが2026年8月に公表した攻撃手法。命令を暗号文にして鍵と復号の指示を添え、AIエージェント自身のコード実行環境で復号させる。これにより、文章の中身を検査する防御をすり抜ける。

autopilotモード
GitHub Copilot CLIの動作モードの一つ。利用者の入力を待たずに、エージェントが複数の手順を自律的に進める。

バグバウンティ
企業が外部の研究者から脆弱性の報告を受け付け、条件を満たせば報奨金を支払う制度。

サンドボックス
プログラムが触れられるファイルや通信先を隔離・制限した実行環境。Copilot CLIのローカルのサンドボックスは、2026年10月時点で実験的機能として提供されている。

.envファイル
アプリケーションの設定値を書いておくファイル。APIキーやデータベースのパスワードなど、秘密情報を置くことが多い。

Auto(モデルの自動選択)
GitHub Copilotで、処理に使うAIモデルを利用者ではなくシステムが選ぶ機能。

【参考リンク】

About GitHub Copilot CLI(外部)
GitHubが提供する、ターミナルで動くAIコーディングエージェント。コードの調査や実装、デバッグを任せられ、autopilotを備える。

Adversa AI(外部)
AIセキュリティ企業。AIエージェントやLLMのレッドチーミングと、コーディングエージェント向けのセキュリティ製品を手がけている。

MAI-Code-1.1-Flash: Better, faster, at a quarter of the cost(外部)
Microsoftのコーディング向けAIモデル。2026年8月11日に発表され、GitHub Copilotでも選べるようになった。

【参考記事】

MAI-Code-1.1-Flash available in GitHub Copilot(外部)
MAI-Code-1.1-FlashのCopilot提供開始の告知。定価は前身より73%低く、Freeでは自動選択でのみ使える。

Cryptographic Context Injection Bypasses AI Guardrails(外部)
8月のCCI公表を整理した調査メモ。Grokでのデータ窃取は20回中8回で成功したと、研究者が自己申告していると伝える。

GitHub Copilot CLI is now generally available(外部)
Copilot CLIの一般提供開始を告げる記事。2月27日の追記で、対象はすべてのCopilot契約者だと訂正されている。

Allowing GitHub Copilot CLI to work autonomously(外部)
autopilotモードの解説。全権限で最良の結果が得られると案内し、権限を絞れば承認が必要な要求を自動で拒否するとする。

Configuring GitHub Copilot CLI(外部)
ツール・パス・URLの許可設定を解説する。シェル構文内のパスや難読化されたURLは、検出しきれない場合があると注記している。

About cloud and local sandboxes for GitHub Copilot(外部)
クラウドとローカルのサンドボックスの解説。ローカル版は実験的機能で既定はオフ。ファイルや外部通信を個別に制限できるとする。

Googleで優先するソースとして追加するボタン
投稿者アバター
山本 達也 代表社員
合同会社デジタルの窓口 代表。ウェブ解析士。生成AI・サイバーセキュリティ・ 宇宙開発領域を中心に執筆。

おすすめ記事