概要
- 2025年6月、 GitHub Copilot Chat で重大な脆弱性(CVSS 9.6)を発見
- 秘密情報やソースコードのサイレント流出、およびCopilotの応答制御が可能
- GitHubの CSPバイパスとリモートプロンプトインジェクション の組み合わせによる攻撃
- 報告後、 Copilot Chatの画像レンダリングが完全に無効化 され修正
- 攻撃の仕組み、影響範囲、GitHubの対応内容を解説
GitHub Copilot Chatにおける重大な脆弱性の発見
- GitHub Copilot Chat は、リポジトリの情報を活用し、開発者の質問やコード説明、実装提案を行うAIアシスタント
- リポジトリ内の コードやコミット、プルリクエスト内容 を利用し、文脈に応じた回答を生成
- 文脈依存性の高さが 攻撃対象面の拡大 につながる
プロンプトインジェクションの発見
- Copilotの文脈認識機能を利用し、 プルリクエスト説明内にプロンプトを埋め込み 攻撃
- GitHubの 不可視コメント機能 (公式ドキュメント参照)を活用し、他ユーザーに見えない形でプロンプトを挿入
- 別ユーザーでログインしプルリクエストページを閲覧すると、 不可視コメントが文脈として注入 されることを確認
- より複雑な指示や悪意あるコード・Markdownレンダリングも 問題なく動作
- Copilot Chatの応答に 任意のコードやリンク、画像の挿入 が可能
権限悪用による情報流出
- Copilotは リクエスト実行ユーザーと同一権限 で動作
- インジェクションしたプロンプトで、 被害者のプライベートリポジトリから秘密情報を抜き出し、URLとして外部送信 が可能
- 例: https://github.com/LegitSecurity/issues-service のようなプライベートリポジトリからの情報流出
可能となる攻撃内容まとめ
- 他ユーザーのCopilot応答内容の 改ざん・制御
- 任意のMarkdown(URL、コード、画像含む)の注入
- Copilotの 被害者権限の悪用 による情報流出
Content Security Policy(CSP)バイパス手法
- GitHubは 厳格なCSP を導入し、外部ドメインからの画像取得等を原則禁止
- 通常の <img>タグによる外部データ流出は不可
- GitHubではREADME等の外部画像URLを Camoプロキシ経由 で配信
- 外部画像URLは Camo署名付きURL に書き換え
- Camoは署名の検証後、GitHubサーバー経由で画像を配信
- 任意URLの生成や動的データ流出は 原則困難
Camoを悪用したバイパス方法
- 事前に 全アルファベット・記号ごとのCamo署名付きURL辞書 を作成
- プロンプト内で 「ASCIIアート」形式で画像を並べる ようCopilotに指示
- 各画像は 1x1透明ピクセル で、被害者には不可視
- Copilotが Camo URLを順番通りにレンダリング、外部サーバーへのアクセスでデータ流出
- キャッシュ問題回避のため、 ランダムパラメータ を各URLに付与
実証例
- プライベートプロジェクトのissue説明文から ゼロデイ脆弱性情報を盗み出す PoC
- Copilotに "AWS_KEY" 等のキーワードでコードベース全体を検索・流出
GitHubの対応
- 脆弱性は 2025年8月14日までに修正
- Copilot Chatの画像レンダリング機能を完全無効化 し、CSPバイパスを封じ込め
参考情報・関連事例
- GitLab Duo で発見された過去の脆弱性事例
- AI時代のAppSec に関する考察
この脆弱性は、 AIアシスタントの文脈依存性とWebアプリのセキュリティ設計 の両面から新たな攻撃リスクを示唆。 不可視コメントやCamoプロキシの仕様 を突いた高度な手法であり、今後もAI統合開発環境のセキュリティ対策が重要となる。