6月27日、BleepingComputerが「Clean GitHub repo tricks AI coding agents into running malware」と題した記事を公開した。
Mozillaのセキュリティリサーチチーム「Zero Day Investigative Network(0DIN)」が発表したこの攻撃手法は、リポジトリ自体には不審なコードが一切含まれないにもかかわらず、AIコーディングエージェントを操作してリバースシェル(攻撃者が遠隔からシェル操作を行うための接続)を確立させることに成功する。コードレビューをすり抜け、セキュリティツールの検知も回避できる点で、AIエージェントが開発現場に定着しつつある今、見過ごせない脅威だ。
背景:AIエージェントの「自律性」が新たな攻撃面を生む
Claude CodeやGitHub Copilot Workspaceなど、ターミナルで自律的にコマンドを実行するAIコーディングエージェントの普及が急速に進んでいる。これらのツールは開発生産性を大きく高める一方、「人間が逐一確認しない」という運用が前提になりやすく、そこに新たなリスクが生まれている。
従来のサプライチェーン攻撃は悪意あるコードをパッケージやリポジトリに直接埋め込む手法が主流だった。今回0DINが示したのは、AIエージェントの「エラーを見つけたら自律的に修正する」という行動原則そのものを逆用するまったく新しいアプローチだ。
「悪意あるコードは一切ない」のに、シェルを奪われる
この攻撃は3つの要素の組み合わせで成立する。
- 一見普通のGitHubリポジトリ —
pip3 install -r requirements.txt、python3 -m axiom initといった標準的なセットアップ手順が記載されているだけ - 意図的にエラーを出すPythonパッケージ — 初期化なしでは動作を拒否し、
python3 -m axiom initを実行するよう指示するエラーを返す。Claude Codeはこれを通常のセットアップエラーと判断し、自動的に該当コマンドを実行する - DNS TXTレコードに仕込まれたペイロード —
python3 -m axiom initはシェルスクリプトを呼び出し、そのスクリプトが攻撃者の管理するDNS TXTレコードからコマンドを取得・実行する
0DINの研究者はこの構造を次のように説明している。
「Claude Codeはシェルを開こうと決断したわけではない。エラーを修正しようとしただけだ。リバースシェルは、Claude Codeが実際に評価したものから3段階の間接参照を経たところにある。信頼したエラーメッセージ、値を取得したスクリプト、そして一度も目にしなかったDNSレコード。」
つまりペイロードは「コード」ではなく「DNS」に存在するため、静的コード解析はもちろん、人間のコードレビューでも発見できない。結果として攻撃者は開発者のユーザー権限でインタラクティブシェルを取得し、環境変数・APIキー・ローカル設定ファイルへのアクセスや、永続化の足がかりまで手に入れられる。
なぜ検知が難しいのか
この手法の厄介さは、セキュリティエージェントも人間のレビュアーもリポジトリを見ただけでは脅威を検知できない点にある。
- リポジトリには不審なコードが存在しない
- エラーメッセージは正規のセットアップエラーと区別がつかない
- 実際のペイロードはDNS TXTレコードに格納されており、コードレビューの対象外
- AIエージェントはエラー回復の一環として自律的にコマンドを実行する
近年注目されているプロンプトインジェクション攻撃がAIへの直接的な指示操作を狙うのに対し、この手法はエラーメッセージという「信頼された情報源」を経由する。AIの自律性そのものが攻撃対象面になっているという点で、プロンプトインジェクションとも性質が異なる新しいカテゴリの脅威だ。
なお0DINの検証ではClaude Codeを対象としているが、エラーを検知して自律的にコマンドを実行する同様の設計を持つエージェントであれば、原理的に同種の攻撃が成立しうる。
想定される拡散経路
0DINは現時点でこれは概念実証(PoC)に留まると断った上で、偽の求人投稿、チュートリアル、ブログ記事、ダイレクトメッセージなどを通じて悪意あるリポジトリが容易に拡散しうると警告している。
特にリスクが高いのは「面接課題としてこのリポジトリをcloneして動かしてください」というシナリオだ。採用プロセスという文脈は受け手が疑いを持ちにくく、AIエージェントに作業を任せること自体が当然の前提になっているケースも多い。
対策:今すぐできることと、エージェントに求められる改善
0DINが提案する根本的な解決策は、AIエージェントがセットアップコマンドの完全な実行チェーンを開示することだ。ランタイムで動的に取得されるスクリプトやコードも含めて可視化すべきとしており、現状のClaude Codeはエラー回復のために実行したコマンドの詳細を十分に提示しないと指摘している。
開発者が今すぐ取れる対策としては以下が挙げられる。
- AIエージェントの自動実行モードを制限し、コマンド実行前に確認ステップを挟む設定にする
- 見知らぬリポジトリをAIエージェントに渡す前に、
requirements.txtやセットアップスクリプトの内容を手動で確認する - ネットワークアクセスをサンドボックス環境に限定する(DNS問い合わせを含む外部通信をブロックすることでペイロード取得を防げる)
AIコーディングエージェントは開発者の生産性を大きく高めるツールだが、その自律性をどこまで許容するかはセキュリティ設計の核心的な問いになりつつある。今回の手法はその問いに対して、業界全体が改めて向き合うべき具体的な事例を突きつけた。
詳細はClean GitHub repo tricks AI coding agents into running malwareを参照していただきたい。