AI チャットの GitHub 連携は「Only select repositories」に絞る(ChatGPT 間接プロンプトインジェクション事例)
AI に公開リポジトリをレビューさせただけで、そこに仕込まれた指示に従って「別の非公開リポジトリ」へワークフローを追加され、シークレットを外へ送られうる。連携アプリに渡すリポジトリを最小限に絞れば、この経路は成立しにくい。
何が起きたか(研究者の報告)
- 攻撃者が指示を埋め込んだ公開リポジトリのレビューを利用者が ChatGPT に頼むと、ChatGPT がその指示に従い、GitHub 連携で付与された権限で、依頼とは無関係な非公開リポジトリにワークフローを追加した。
- コミットを契機に GitHub Actions でそのワークフローが自動実行され、ダミーのシークレットが外部に送られた。依頼後に利用者の承認や操作は不要だった。
- 前提は、連携に許可するリポジトリが既定の「All repositories」のままだったこと。1 リポジトリに絞った検証では攻撃は成立しなかった。
- 研究者によると 9 月に 2 回報告したが、10 月 14 日に OpenAI のバグバウンティで「対象範囲外」としてクローズされ、翌日の再検証でも成立した。OpenAI が脆弱性と認めた発表・修正・CVE は 10 月 17 日時点で見当たらない。
- OpenAI のヘルプセンターは ChatGPT の GitHub アプリを読み取り専用と案内しており、研究者がどの機能で書き込んだのかは記事に明記されていない。
やること
- 連携アプリのリポジトリ範囲を確認する: GitHub の Settings → Applications(または Organization の Installed GitHub Apps)で、AI 系アプリの「Repository access」が All repositories になっていないか見る。必要なものだけ「Only select repositories」で選ぶ。
- 信頼できないリポジトリは別の場所で読ませる: 他人の公開リポジトリのレビューは、自分の非公開リポジトリに書き込める連携を付けた状態で頼まない。
- 身に覚えのないワークフローを探す:
.github/workflows/に知らないファイルやコミットが増えていないか、Actions の実行履歴に知らないワークフローがないか確認する。 - 怪しいときはシークレットをローテーションする: 信頼できないリポジトリや公開リポジトリを AI にレビューさせたことがあり、連携が広い権限だった場合は、Actions のシークレットを入れ替える。
注意点
- 内容は研究者の主張で、ベンダーの確認はない。ただし「AI が読む外部コンテンツに指示を仕込み、AI が持つ別の権限で動かす」型は他の AI 連携でも同じ構造なので、範囲の最小化は製品を問わず効く。
- ワークフローの追加は Actions のシークレットに直結する。リポジトリ側で GitHub Actions の uses をコミット SHA で固定する(pinact) や GitHub アカウント 1 つの侵害で本番まで行かれない CD 権限設計 とあわせて、書き込める主体そのものを減らす。
- 関連: GhostAction 系「偽セキュリティ監査」ワークフローが混入したときの初動