Plugin4Shellと呼ばれる新たに公表された脆弱性により、主要なAIコーディングエージェントにサプライチェーン上の弱点があることが明らかになりました。この欠陥を悪用すると、攻撃者は信頼されたSHA固定済みプラグインを悪意あるコードに置き換えることができ、ユーザーの操作を介さずにリモートコード実行が可能になります。
リモートコード実行
研究者のOr Nevo氏、Dor Granat氏、Niv Hoffman氏は、この問題がAnthropic Claude Code、OpenAI Codex、GitHub Copilot、Gemini CLIに影響を及ぼすことを突き止めました。
この脆弱性は、プラグインマーケットプレイスや企業のセキュリティチームが用いている重要なセキュリティ対策、すなわちアドオンをレビュー・承認済みの特定のGitコミットに固定する仕組みを無効化してしまいます。
Plugin4Shellゼロクリックリモートコード実行
AIエージェントのプラグイン、スキル、拡張機能は、エージェントを操作する開発者の権限で実行されることが多くあります。そこには、ソースコード、シークレット、クラウド環境、本番システム、社内サービス、機密性の高い企業データへのアクセス権が含まれる場合もあります。
標準的な安全なワークフローでは、マーケットプレイスや組織が特定のGitコミットでプラグインをレビューし、そのコミットのSHAハッシュを記録します。その後エージェントは、レビュー済みの正確なコードを取得するはずです。
しかし、Plugin4Shellはこの前提を崩してしまいます。影響を受けるエージェントは、Gitのチェックアウト時に固定されたSHAを要求するものの、チェックアウトされた作業ツリーが実際にそのSHAと一致しているかどうかを検証していません。これにより、Git参照名の曖昧さにつけ込む余地が生まれます。
Claude Code、Codex、GitHub Copilotの場合、攻撃者は固定コミットと同じ40文字の16進数名を持つブランチを作成できます。
そのブランチがリポジトリのデフォルトブランチに設定されると、Gitは意図されたコミットハッシュではなくブランチ名の方を解決してしまうことがあります。その結果、エージェントは信頼されたピンに紐づくコードを正常にインストールしたように見せかけながら、実際には攻撃者が制御するコードをインストールしてしまう恐れがあります。
Gemini CLIにも同様の問題があると報告されています。そのインストールプロセスは固定コミットを取得した後、FETCH_HEADをチェックアウトします。攻撃者がFETCH_HEADという名前のデフォルトブランチを作成すると、Gitは取得済みのコミットではなくそのブランチを解決してしまう可能性があります。
この攻撃はゼロクリックに分類されています。複数のコーディングエージェントが、既にインストール済みのプラグインを自動更新するためです。攻撃者は一見無害なプラグインを公開し、マーケットプレイスの承認を得た上で、利用が広がるのを待つだけで済みます。
マーケットプレイスの通常の更新によって固定バージョンが変更されると、攻撃者は上流リポジトリを改変し、新しいピンが悪意あるブランチを指すようにすることができます。こうしてバックグラウンドでのプラグイン更新が行われると、インストール確認画面もユーザーのクリックもその他の警告も一切必要とせずに、影響を受けるシステムへ悪意あるコードを展開できてしまいます。
研究者らはさらに、攻撃者が既存メンテナーのリポジトリを乗っ取り、広く使われている正規のプラグインを攻撃の配信手段に変えることも可能だと指摘しています。これは、プラグインコードをレビューしコミット固定に依存している組織であっても、利用しているエージェントが最終的にチェックアウトされたコミットを検証していなければ、依然として脆弱である可能性を示しています。
パッチと緩和策
根本的な解決策は単純明快です。エージェントは、インストール後に実際にチェックアウトされたコミットを以下のようなチェックで検証する必要があります。
test "$(git rev-parse HEAD)" = "<pinned-sha>" || abort
この検証は、エージェント自体の中で、エンドポイント上で行われなければなりません。マーケットプレイス側では、ローカルのGitクライアントがピンをどう解決するかを確実に制御できないためです。
本稿執筆時点で、Anthropicはバージョン2.1.179でClaude Codeにパッチを適用済みであり、OpenAIもCodex 0.146.0でこの脆弱性に対応済みです。Microsoftは公表時点でGitHub Copilotの修正版をまだリリースしておらず、Googleは非推奨となったGemini CLIについてはパッチを提供しない見通しで、ユーザーには移行を推奨しています。
組織は、サポート対象のコーディングエージェントを速やかに更新し、インストール済みプラグインの棚卸しを行い、未検証のGitホスティングソースへのアクセスを制限し、既存のエージェント拡張機能についてリポジトリの所有権とデフォルトブランチ設定を見直すべきです。
SOCのアラート調査時間を1件あたり21分削減。即座のIOCコンテキストでSOCの即応力を強化: TI LookupをSOCに統合する
翻訳元: https://gbhackers.com/plugin4shell-zero-click-rce/