概要:GitHub Copilot Chatの重大な脆弱性
2025年6月に発見されたGitHub Copilot Chatの重大な脆弱性により、攻撃者がプライベートなソースコードや機密情報を盗み出すことが可能であったことが判明しました。CVSSスコア9.6と評価されたこの脆弱性は、Content Security Policy (CSP) のバイパスとリモートプロンプトインジェクションを組み合わせたものでした。攻撃者はプルリクエストに隠されたプロンプトを埋め込むことで、プライベートリポジトリのデータを外部に持ち出し、Copilotの応答を制御し、悪意のあるコード提案やリンクを挿入することができました。
脆弱性の背景
GitHub Copilot Chatは、GitHubインターフェースに直接統合されたAIアシスタントです。プロジェクトのコンテキストに基づいて、開発者の質問に答えたり、コードを説明したり、実装を提案したりするのに役立ちます。Copilot Chatはリポジトリの内容にアクセスするため、機密データを安全に処理する必要があります。コンテキストが豊富であるほど、潜在的な攻撃対象領域は大きくなります。今回のケースでは、攻撃者はCopilotのコンテキスト認識能力を悪用し、一見無害なプルリクエストの説明に指示を忍び込ませました。GitHubの文書化された機能である「見えないコメント」により、プロンプトは人間からは隠されたままCopilotに影響を与えることができました。ユーザーがプルリクエストを閲覧すると、隠されたプロンプトがCopilotのコンテキストに読み込まれる仕組みでした。
脆弱性の悪用手口
攻撃は、悪意のあるプロンプトを含む隠しコメントをプルリクエストの説明に配置することから始まりました。このコメントは、目に見える差分やWebインターフェースには表示されませんでしたが、GitHubによって処理されました。処理されると、Copilotは隠された指示を読み込み、閲覧ユーザーの権限で実行しました。初期のテストでは単純な「HOORAY」メッセージが使用されましたが、研究者はすぐにAWS_KEYのような機密情報をプライベートコードから検索したり、リポジトリファイルをbase16でエンコードしたり、それらを画像URLに埋め込んで外部に持ち出したりする完全なコマンドセットにエスカレートさせました。デフォルトでは、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支援ワークフローを新たな攻撃手法から保護するためには、継続的な警戒が必要です。