9月18日、The Hacker Newsが「Plugin4Shell Lets Repository Owners Swap Pinned Plugin Code Across Four AI Coding Agents」と題した記事を公開した。AIコーディングエージェント4製品に共通するプラグインのバージョンロック機構を回避できる脆弱性「Plugin4Shell」について詳しく紹介されている。
バージョンをピン留めしても意味がない——Plugin4Shellの核心
セキュリティ企業Air Securityが発見したPlugin4Shellは、AIコーディングエージェントのプラグイン管理機構の根本的な欠陥を突く攻撃手法だ。
AIコーディングエージェントはオンラインマーケットプレイスからプラグイン(add-on)をインストールする。安全性を担保するため、マーケットプレイスは各プラグインをコミットハッシュ(コードの特定スナップショットを一意に示す長い文字列)に紐付けてピン留めしている。レビュー済みの特定バージョンしか使えないようにする、いわゆるバージョンロックの仕組みだ。
ところが、Air Securityの調査によると、これら4つのエージェントはコミットハッシュでスナップショットを取得するものの、実際に取得したコードがハッシュと一致するか検証していない。
ここで問題になるのがGitのブランチ命名規則だ。コミットハッシュと同じ文字列をブランチ名として作成できるホスティング環境では、プラグインのリポジトリオーナーがそのブランチ名を別のコミットに向け直すことで、エージェントに悪意あるコードをインストールさせることができる。エージェント側は「ピン留めされたバージョン通り」と報告し続けたままで、だ。
この攻撃構造はソフトウェアサプライチェーン攻撃の一形態として位置づけられる。プラグインエコシステムが拡大し、サードパーティ製プラグインが当然のように使われるようになったAIコーディングエージェント環境では、「インストール時に検証済み」という前提が崩れることの影響範囲が特に広い。
4製品の対応状況——Claude CodeとCodexは修正済み、CopilotとGemini CLIは未修正
実務上で最も重要な情報がこの対応状況の差だ。
| エージェント | 状況 | 対処 |
|---|---|---|
| Anthropic Claude Code | 修正済み(v2.1.179) | v2.1.179以降へ更新 |
| OpenAI Codex | 修正済み(v0.146.0) | v0.146.0以降へ更新 |
| GitHub Copilot | 未修正 | パッチなし |
| Google Gemini CLI | 修正予定なし | Antigravityへ移行 |
Air Securityは5月に4製品すべてに対する実証攻撃(PoC)を構築し、6月にベンダーへ報告した。9月18日時点でCVE番号は未採番、4社いずれもセキュリティアドバイザリを公開していない。実際の攻撃に使われた形跡もない。
OpenAIは公開PRのコメントで同じ不具合を認めており、「GitがリクエストされたコミットのSHAをブランチ名として解釈することがあり、ピン留めされたものとは異なるコミットが実体化する可能性がある」と説明している。
Gemini CLIについては、Googleが6月にコンシューマー向けサービスの提供を停止しており、Air Securityへの回答として修正対応を行わない旨を伝えた上で後継のAntigravityへの移行を案内したと、The Hacker Newsの記事は伝えている。「修正予定なし」はサービス終了に伴う判断であり、現行製品に修正が間に合わなかったケースとは文脈が異なる。Air Securityによると、Antigravityはこの攻撃の影響を受けない。
GitHub Copilotについては、9月18日時点でパッチの提供も公式コメントも確認されていない。
攻撃が成立する条件と、GitHub利用者への影響
重要な限定条件がある。GitHubはコミットハッシュと見分けがつかないブランチ名・タグ名の作成を禁止している(GitHub公式ドキュメント:ブランチ名・タグ名の特殊文字の扱い)。そのため、GitHubでホストされているリポジトリからインストールしたプラグインは、このブランチ名トリックの影響を受けない。
The Hacker Newsが9月18日時点で確認したところ、AnthropicのコミュニティカタログおよびClaude Code・Copilotのデフォルトカタログに含まれるプラグインは、すべてGitHubリポジトリを参照していた。
ただしGemini CLIは別の経路で攻撃できる。ハッシュ形式の名前の代わりに、メインブランチをFETCH_HEADという名前にしたリポジトリで同様の効果が得られる。GitHubのルールはこの名前を明示的に禁止していないため、GitHubからのインストールであっても安全とは言い切れない。
バックグラウンド自動更新が無人攻撃を可能にする
攻撃の深刻度を上げる要素がバックグラウンド自動更新だ。これが有効な場合、ユーザーの操作なしにインストール済みプラグインが差し替えられる。Air Securityによると、Claude CodeとCodexではこの機能がデフォルトで有効になっている。
ただし自動更新がデフォルトで動くのは、各エージェントが標準搭載するGitHubベースのマーケットプレイスに限られる(Anthropicの公式ドキュメントおよびGitHub Copilotのプラグイン管理ドキュメントに明記されている)。外部マーケットプレイスへの自動更新はオフまたはオプトインだ。
プラグインが実行されると、それはエージェントを使っているユーザーと同じ権限で動く。差し替えられたプラグインは、そのユーザーのファイル、保存済み認証情報、アクセス可能なシステムすべてを操作できる。AIエージェントがファイルシステム操作やシェル実行を伴う作業を担う場面が増えている現状では、プラグインの差し替えが即座に実害につながりうる。
なお、修正されたエージェントへのアップデートが、すでに差し替えられているプラグインを除去するかどうかは、現時点で情報がない。
類似手口との連続性——Air Securityの調査履歴
Air Securityは以前にも類似の調査結果を公開しており、6月にはThe Hacker Newsが偽のスキルがセキュリティスキャナーを通過し約26,000のエージェントに到達した事例を報じている。Plugin4Shellはその手法を発展させたもので、外部リンクの差し替えからバージョンロック下でのプラグイン差し替えへと攻撃面を拡大している。
AIエージェントのプラグインエコシステムはVSCode拡張やnpmパッケージと同様に急拡大しており、サプライチェーン攻撃の標的として成熟しつつある段階にある。Plugin4Shellが示すのは、バージョンロックという「あるはずの保証」が実装レベルで担保されていなかったという事実であり、マーケットプレイス側・エージェント側の双方で検証ロジックの整備が求められる。
詳細はPlugin4Shell Lets Repository Owners Swap Pinned Plugin Code Across Four AI Coding Agentsを参照していただきたい。




