コードレビューに潜む見えない脅威
悪意あるプルリクエストは、コードレビューを完璧にすり抜けることができます。数日後、それはAIアシスタントを操ってプロジェクトの機密情報を密かに外部へ流出させます。攻撃者は単純に、一見ごく普通のPNGファイルの中に指示を隠すだけです。コード検査システムは通常、こうしたファイルを完全に無視します。ミズーリ大学カンザスシティ校のASSETグループの研究者らは、この手法を「GhostCommit」と名付けました。彼らは最近、実際に動作する攻撃例を公開しました。さらに、影響を受けるツールの開発者にも事前に通報しています。
二段階の侵入戦略
この侵入は、明確に二つの段階に分かれて展開されます。まず攻撃者は、リポジトリの変更を求めるリクエストを提出します。そこには、AIアシスタント向けのガイドラインを記載したAGENTS.mdファイルが含まれています。この文書自体は一見無害です。単に特定のビルド仕様の画像を参照しているだけに見えます。しかし、この画像の中には不穏な指示が埋め込まれています。それは、AIに.envファイルを読み取らせるよう命じるものです。続いて、その各バイトを数値に変換し、その数列をソースコードに埋め込むよう指示します。
自動検知システムをすり抜ける
CodeRabbitやBugbotといった自動化システムも、この異常を検知できませんでした。CodeRabbitはデフォルト設定で、厳密なスキャンの対象から画像を除外しています。その結果、PNGファイルは単なるバイナリファイルとして扱われてしまいます。「malicious prompt injection(悪意あるプロンプトインジェクション)」という明示的な文言が含まれていても、警告は作動しませんでした。.envファイルを読み取れという直接的な命令すら、何の警告も引き起こさなかったのです。
静かなる実行とデータ流出
管理者がこれらの変更をマージすると、悪意ある指示は静かに残り続けます。そして、しかるべき機会が訪れるのをじっと待ちます。やがて開発者がAIアシスタントに、通常のモジュール作成を依頼します。この時点でエージェントはAGENTS.mdファイルを読み込みます。続いて、参照先の画像を開き、隠された命令を実行してしまいます。ある実験では、Claude Sonnetを搭載したCursor IDEが.envの中身を書き写しました。機密情報は311個の整数として記録されました。この数列を逆変換すると、元のファイルと完全に一致したのです。
従来の漏洩検知をすり抜ける
開発者は、依頼した機能が実装されたことを確認するだけです。その後、このコードを公開リポジトリにプッシュしてしまうかもしれません。攻撃者はそれを見て、公開されたファイルを単純にダウンロードします。最後に、その数値の配列を平文に戻すだけです。従来の漏洩検知の仕組みは、この問題を完全に見逃してしまいます。数値のタプルやリストを、機密性の高い認証情報として分類することはないからです。
モデル依存性と環境要因
GhostCommitの公式開示情報を作成した研究者らは、異なるAIモデルによる影響の違いについても検証しました。CursorとAntigravityは、Sonnet、Gemini、GPT-5.5のいずれと組み合わせた場合でも、一貫して.envの中身を流出させました。一方でClaude Codeは、まったく同じモデルの組み合わせであっても、この命令の実行をきっぱりと拒否しました。ある奇妙な事例では、Opusが最初に機密情報を記録したものの、その後この欺瞞に気づき、データを消去しました。結局のところ、結果を左右したのは基盤となる言語モデルそのものよりも、エージェントの実行環境の方だったのです。
甘いコードレビューの危険性
人気プロジェクトにおける緩いレビュー体制は、この脆弱性を著しく深刻化させます。研究者らは、300の活発なオープンソースリポジトリにわたる6,480件のプルリクエストを詳細に調査しました。その結果、驚くべき脆弱性の傾向が明らかになりました。承認された変更のうち実に73%が、検証されないままメインブランチに取り込まれていたのです。人間によるレビューも、自動システムによる検査も、実質的な精査を行っていませんでした。
GhostCommitへの対抗策を固める
防御を固めるため、研究者らはGhostCommitのGitHubリポジトリ向けに、マルチモーダル検査モジュールを開発しました。この高度なツールは、テキスト、コード、さらには画像までも精査します。80件の新規プルリクエストを対象とした厳密なテストでは、見逃した攻撃はわずか1件のみでした。さらに、画像の中に指示を隠した亜種はすべて検知に成功しました。重要な点として、30件の無害な変更に対する誤検知はゼロでした。AIエージェントの行動を制御することも、補完的な防御策となり得ます。これには、指示を隠蔽しようとする試みを監視することも含まれます。また、認証情報を含むファイルへの不当なアクセスを制限することも含まれます。
翻訳元: https://meterpreter.org/ghostcommit-ai-vulnerability/