GitHub Copilotの脆弱性により、プライベートリポジトリからソースコードが盗まれる可能性

概要:GitHub Copilotの重大な脆弱性が発覚

2025年6月に発見されたGitHub Copilot Chatの重大な脆弱性により、攻撃者がプライベートなソースコードや機密情報を窃取できる状態にあったことが明らかになりました。この脆弱性はCVSSスコア9.6と評価され、Content Security Policy (CSP) のバイパスリモートプロンプトインジェクションを組み合わせたものでした。攻撃者はプルリクエストに隠されたプロンプトを埋め込むことで、プライベートリポジトリのデータを外部に持ち出し、Copilotの応答を操作し、悪意のあるコード提案やリンクを挿入することが可能でした。

脆弱性の背景:Copilot Chatのコンテキスト認識

GitHub Copilot Chatは、GitHubインターフェースに直接統合されたAIアシスタントです。開発者の質問に答えたり、コードを説明したり、プロジェクトのコンテキストに基づいて実装を提案したりする機能を持っています。Copilot Chatがリポジトリの内容にアクセスするため、機密データの安全な取り扱いが不可欠です。コンテキストが豊富であるほど、潜在的な攻撃対象領域も拡大します。今回のケースでは、攻撃者はCopilotのコンテキスト認識能力を悪用し、一見無害なプルリクエストの説明に指示を忍び込ませました。GitHubの機能である「見えないコメント」が利用され、人間には見えないプロンプトがCopilotに影響を与えることを可能にしました。

脆弱性の悪用手口:隠されたプロンプトとCamoプロキシの悪用

攻撃は、悪意のあるプロンプトを含む隠しコメントをプルリクエストの説明に配置することから始まりました。このコメントは、目に見える差分やウェブインターフェースには表示されませんでしたが、GitHubによって処理されました。ユーザーがプルリクエストを閲覧すると、隠された指示がCopilotのコンテキストに読み込まれ、閲覧ユーザーの権限で実行されました。

  • プロンプトインジェクションの拡大:初期テストでは単純なメッセージが使われましたが、研究者はすぐにAWS_KEYのような機密情報を検索したり、リポジトリファイルをbase16でエンコードしたり、それらを画像URLに埋め込んで外部に持ち出したりする完全なコマンドセットへとエスカレートさせました。
  • Camoプロキシの悪用:GitHubのCSPは通常、外部画像の読み込みをブロックします。しかし、Markdownをレンダリングする際、GitHubはサードパーティの画像URLをCamoプロキシ経由で処理するように書き換え、各URLにHMAC署名を付加します。研究者は、すべての英数字と記号に対応するCamo URLの辞書を事前に生成し、それを悪意のあるプロンプトに埋め込みました。Copilotは実行時に、この辞書から画像タグを組み立てることで、完全なデータ持ち出しURLを再構築しました。被害者のブラウザがこれらの画像をリクエストすると、Camoプロキシが攻撃者のサーバーにリクエストを転送し、プライベートコードを透過的な1×1ピクセルで送信しました。この独創的なCamoプロキシの悪用により、ユーザーに警告することなく、リポジトリコンテンツのサイレントかつ継続的な抽出が可能になりました。

GitHubの対応と今後の対策

概念実証では、コードベース全体の窃取、機密情報の収集、そして無防備な開発者への悪意のある「Copilotevil」パッケージの配信が実証されました。この脆弱性報告を受け、GitHubはCamoバイパスを阻止するため、Copilot Chatでの画像レンダリングを完全に無効化しました。2025年8月14日までに展開されたパッチにより、チャット応答におけるMarkdown画像タグの処理機能が削除されました。この修正により、CSPバイパスとリモートプロンプトインジェクションの経路が閉鎖され、プライベートリポジトリコンテンツの機密性が回復されました。

開発者には、Copilot Chatの統合を更新し、プルリクエストに異常な隠しコンテンツがないか確認することが強く推奨されています。AI支援ワークフローを新たな攻撃手法から保護するためには、継続的な警戒が必要です。


元記事: https://gbhackers.com/github-copilot-flaw/