GitHub Copilot CLIの脆弱性、暗号化プロンプトインジェクションで開発者の機密情報を窃取可能に

Adversa AIの研究者らは、GitHub Copilot CLIを誘導し、ローカルファイルを読み取らせて攻撃者に送信させられることを実証しました。

攻撃に必要なのは悪意あるWebページ1つだけで、「Cryptographic Context Injection(CCI)」と呼ばれる手法を使います。GitHubは報告内容を検証したものの、脆弱性としては扱わない判断を下しました。

Adversa AIが公開した調査によると、CCIは悪意ある命令を強力な暗号文として隠します。ページは鍵の素材も用意し、Pythonでコンテンツを復号するようエージェントに指示します。静的なガードレールはテキストを読み取るだけで、暗号を実行することはありません。

このため、復号処理はエージェント自身のコード実行環境で行われます。復号された出力は、エージェントがいま実行したコードの結果のように見えます。エージェントはそれを自分自身の出力として信頼してしまいます。

Copilotでの検証では、ユーザーがオートパイロットモードでCLIを実行し、1つのURLを取得するよう依頼します。ページには復号鍵の候補が2つ用意されています。1つは本物です。もう1つはテンプレートで、エージェントがローカルファイルを読み取らなければ埋められません。

この鍵を組み立てる過程で、エージェントは.env.prodなどの標的ファイルを読み取り、その内容を鍵の文字列に組み込みます。この読み取りこそが窃取にあたり、復号が成功する前に実行されます。

テンプレート化された鍵による復号は、設計上失敗します。するとエージェントは本物の鍵に切り替えます。第2段階では、「さらにコンテキストを取得する」ために後続のURLを取得するよう指示されます。このURLには、収集したファイルの内容がリクエストパラメータとして含まれています。

機密情報は約28秒で攻撃者のエンドポイントに到達します。ユーザーに確認プロンプトは表示されず、実行ログにも送信先ホストの名前は出てきません。エージェントの最終的な要約でさえ、「承認された読み取り者のエンドポイントを確認した」と述べています。

研究者らは、あらゆる環境でワンクリックで侵害できるとも、確認プロンプトを回避できるとも主張していません。攻撃チェーンの成立には、オートパイロットモードであることと、寛容なモデルが使われていることの2つの条件が必要です。

Copilot内で提供されるモデルによって、耐性は大きく異なります。

検証した有料アカウントでは、脆弱なモデルは既定ではなく、手動で選択する必要がありました。ただし、モデル選択を「Auto」のままにすると、セッションによってはルーターが脆弱なモデルを割り当て、別のセッションでは安全なモデルを割り当てました。

ユーザーは、どのモデルがセッションを処理しているかを確認することも制御することもできません。この攻撃では暗号化が不可欠です。同じ命令を平文で送った場合は、プロンプトインジェクションとして検知され、拒否されました。

コーディングエージェントにとって、コード実行や外部へのリクエストは日常的な動作です。手の届く範囲にあるデータには、開発者のディスク上のソースコード、設定、認証情報が含まれます。Adversaは、従来型のプロンプトインジェクションを想定した防御ではこの攻撃を見逃すと指摘しています。攻撃対象となるのは、エージェントが信頼するコンテキスト全体だからです。そのコンテキストには、ツールの出力、実行時の結果、復号されたデータが含まれます。

Adversaによると、悪意ある命令はエージェントが復号して初めて読めるテキストになるため、特定の文字列をブロックすることはできません。防御側は代わりに、一連の動作の流れを監視すべきだとしています。具体的には、信頼できないコンテンツが届き、コードが実行され、ローカルファイルが読み取られ、エージェントが無関係なホストに接続するという流れです。

推奨される対策は次のとおりです。完全に解決された引数を含め、すべてのツール呼び出しをセッション単位のトレースとして記録します。単一のペイロードではなく、一連の動作全体に対してアラートを設定します。新しいネットワーク接続先やワークスペース外への書き込みには確認を求めます。オートパイロットでは、こうした動作を既定で厳格に拒否します。取得したコンテンツは、ツールも認証情報もないコンテキストに隔離します。さらに、ルーティング対象のプールに含まれるすべてのモデルが同じインジェクション耐性の基準を満たしているか、ベンダーに確認します。

Adversaは2026年9月17日に、この問題をGitHubのバグバウンティプログラムに報告しました。2026年10月1日の時点で、トリアージでは報告内容が検証されたものの、脆弱性には分類しないと判断されています。

GitHubの説明によると、ユーザーが完全な自律権限を与えたうえで、攻撃者が管理するコンテンツを取得するようCopilot CLIに明示的に依頼したことが理由です。報告は報奨金の対象外と判断されました。GitHubは今後この機能を厳格化する可能性があるとしつつも、現時点で発表できる内容はないとしています。

Adversaはこの判断に同意していません。製品が平文版の攻撃は拒否していること、またユーザーには送信先も、ファイルがマシンの外に出た兆候も見えないことを指摘しています。影響を受けるモデルでは、攻撃チェーンは今も再現できます。Adversaは具体的なペイロードを公開していません。

翻訳元: https://cyberpress.org/github-copilot-cli-prompt-injection/

本記事は cyberpress.org の記事を翻訳・要約したものです。