AIコーディングエージェントのSHA固定回避の脆弱性Plugin4Shell
- タグ
- 国外
Air Securityの2026年9月17日の報告によると、Claude Code・Codex・GitHub Copilot・Gemini CLIでは、信頼されたプラグインが気づかれずに悪性の版へ入れ替わり、SHAによる固定を越えて自動で導入される(Plugin4Shell)[6]。Anthropic・OpenAI・Microsoftは修正し、GoogleはGemini CLIを非推奨にして修正しない[6]。
脆弱性の内容
Anthropicは文書で、Claude Codeのマーケットプレイスではプラグインの取得元に40文字の小文字のコミットSHA(sha)を書け、refとshaの両方があればshaをチェックアウトすると説明している[8]。GitHubはCopilot CLIの文書で、shaでの固定を「強制pushやタグ・ブランチの移動の影響を受けない」再現可能なインストールのためとした[11]。
Air Securityの報告では、Plugin4Shellは4製品すべてに影響する、ゼロクリックで深刻度の高い遠隔コード実行(RCE)である[6]。ゼロクリックになるのはプラグインの自動更新のためで、Claude CodeとCodexでは自動更新が既定になっている[6]。被害者は、信頼するマーケットプレイスから、審査と固定を経たプラグインを入れているだけでよい[6]。同じ設計の誤りが影響を受けるすべてのエージェントにあり、数百万のエージェントが脆弱な状態にあるとした[6]。
The Hacker Newsは、プラグインがエージェントの利用者と同じ権限で動くため、差し替えたコードはその人のファイル、保存された認証情報、ログインできるシステムに届きうるとのAir Securityの説明を伝えた[7]。
CVE-2026-86063のレコードでは、影響を受ける版のClaude CodeとClaude Desktopのプラグインのインストールの処理は、git checkoutの結果のHEADが、マーケットプレイスの固定した40文字のSHAと等しいかを確かめない[4]。悪用には、利用者が悪意あるプラグインをインストールし、見かけ上安全なハッシュに固定することを要する[4]。
| 項目 | 値 | 資料 |
|---|---|---|
| 採番機関 | GitHub_M | [4] |
| CVSS | 4.0の基本値7.5(HIGH。GitHubの評価) | [4、5] |
| CVSSのベクトル | CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N | [4] |
| CWE | CWE-494(完全性の確認の無いコードのダウンロード)、CWE-829(信頼できない管理範囲の機能の取り込み) | [4] |
| 悪用されたときの影響 | 攻撃者が支配するプラグインのコードのインストール | [4] |
| 悪用の状況 | CISAのSSVCで、悪用(Exploitation)はnone、自動化(Automatable)はno、技術的影響はtotal | [4] |
The Hacker Newsは、9月18日にはCVEが割り当てられておらず、4社のどれもセキュリティアドバイザリを出しておらず、実際の攻撃に使われた形跡も無いと報じた[7]。
ブランチ名を使う手口
Air Securityの報告では、Claude Code・Codex・GitHub Copilotはプラグインのリポジトリをcloneし、固定したSHAをチェックアウトする[6]。攻撃者は固定したSHAと同じ40桁の16進数を名前にしたブランチを作り、リポジトリの既定ブランチにする[6]。gitは、名前が参照とオブジェクトIDの両方に当たると参照を優先し、「refname is ambiguous」の警告を出すだけである[6]。既定でないブランチはリモート追跡の参照として取得されるだけで、チェックアウトはコミットに戻る[6]。
Air Securityは、この手口が成り立つのはハッシュの形のブランチ名を作れるホストだけで、GitHubは40桁の16進数のブランチ名を拒むが、Bitbucketや自前のgitサーバーは許すとした[6]。Anthropicの文書がBitbucketと自前のgitをマーケットプレイスの基盤として挙げていることも指摘した[6]。
GitHubの文書によると、GitHubはGitのオブジェクトIDに見える名前(0-9とA-Fだけの40文字)のブランチとタグを制限している[10]。The Hacker Newsは9月18日に各エージェントの標準のマーケットプレイスを確かめ、Anthropicのコミュニティカタログと、Claude Code・GitHub Copilotの既定のカタログのプラグインは、すべてGitHubのリポジトリを指していたと報じた[7]。
FETCH_HEADという既定ブランチ
Air Securityの報告では、Gemini CLIは--refで固定し、浅いclone、固定したコミットのfetch、FETCH_HEADのチェックアウトの3段でインストールする[6]。リポジトリの既定ブランチの名前がFETCH_HEADなら、チェックアウトはそのブランチに解決され、取得したコミットは捨てられる[6]。
Googleは文書で、--refをインストールするgitの参照(ブランチ・タグ・コミット)、--auto-updateを拡張の自動更新を有効にする指定と説明している[12]。The Hacker Newsは、GitHubのハッシュ形の名前の禁止はFETCH_HEADという名前を明確には防がず、GitHubからのインストールで不備を避けられるとは確かめられていないと報じた[7]。
攻撃の経路と自動更新
Air Securityは攻撃の経路を2つ挙げた[6]。良性のプラグインを公開して後から悪意ある版に替える方法と、他の作者が作りマーケットプレイスが信頼しているプラグインのリポジトリを乗っ取る方法で、どちらもマーケットプレイスの支配を要しない[6]。Air Securityが示した攻撃の手順は5段ある[6]。
- 良性のプラグインを公開し、マーケットプレイスがそのコミット(aaa…)で固定する[6]。
- プラグインが利用者に広まる[6]。
- 良性の新版を作り、固定をそのコミット(bbb…)に変えるプルリクエストをマーケットプレイスに出す[6]。
- マーケットプレイスの運営者が承認した後、bbb…という名前のブランチを既定にし、悪意あるコードを指させる[6]。
- 固定の変更が自動更新を起こし、プロンプトもクリックも無くコードが実行される[6]。
Anthropicの文書では、Claude Codeの自動更新は、claude-plugins-officialなど公式のマーケットプレイスでは既定で有効で、コミュニティ・第三者・ローカルのマーケットプレイスでは既定で無効である[9]。GitHubのCopilot CLIの文書では、組み込みのawesome-copilotマーケットプレイスのプラグインは信頼した作業ディレクトリでセッションの開始時に自動更新され、利用者が加えたマーケットプレイスはautoUpdateをtrueにしたときだけ自動更新される[11]。インストール元には任意のGitのURLを指定できる[11]。
時系列
| 日付 | 主体 | 内容 | 資料 |
|---|---|---|---|
| 2026年 | Air Security | 不備を見つけ、4製品すべてに対して動作するPoCを作った | [6] |
| 2026年 | Gemini CLIが6月18日にGoogle AI Pro・Ultraと無料の利用者向けの要求の処理を止め、Antigravity CLIに移ると公表した | [13] | |
| 2026年 | Air Security | 協調された開示の下で4社に開示した | [6] |
| 2026年 | Anthropic | Claude Code 2.1.179を公開した | [1] |
| 2026年 | Anthropic | Claude Codeの修正を確認した(Air Securityの年表) | [6] |
| 2026年 | OpenAI | Codex CLI 0.146.0を公開し、変更一覧に「Verify Git plugin SHA checkouts」(#34644)を載せた | [2] |
| 2026年 | Gemini CLIは非推奨のため修正を出さないと確認し、Antigravityへの移行を勧めた(Air Securityの年表) | [6] | |
| 2026年 | - | Codexの修正が確かめられた(Air Securityの年表) | [6] |
| 2026年 | Microsoft | VS Code 1.136を公開し、Air Securityの年表ではこの日に修正を確認した | [3、6] |
| 2026年 | - | CVE-2026-86063が予約された | [4] |
| 2026年 | Air Security | Plugin4Shellを公表した | [6] |
| 2026年 | - | CVE-2026-86063が公開され〔注1〕、NVDに登録された | [4、5] |
| 2026年 | Air Security | 報告に追記し、CVEの割当とGitHub Copilotの修正を加えた | [6] |
対象の製品と版
修正と回避策
Air Securityの報告によると、対策は、チェックアウトの後に作業ツリーにある実際のコミット(HEAD)を解決し、固定したSHAと一致しなければ中止する確認をエージェントの中で行うことである[6]。要求した参照ではなく、解決後のHEADを確かめなければならない[6]。固定はエージェントの中で解決されるため、保証を戻せるのはエージェント側の修正だけだとした[6]。
Air Securityは、マーケットプレイスがハッシュの形の名前を拒むホスト(事実上GitHubだけ)に限れば、ブランチ名の手口を弱められると説明した[6]。ただし、エージェントが公式に対応するホストを締め出すことになり、Gemini CLIの手口には効かない[6]。
Air Securityの11月の追記では、AnthropicがClaude CodeとClaude DesktopのPlugin4ShellにCVE-2026-86063(深刻度は高)を割り当てた[6]。MicrosoftはVS Codeの修正版で、チェックアウトするプラグインのコミットが固定したSHAと一致するかを確かめるようにした[6]。Air Securityは追記で、Claude CodeとVS Codeをそれぞれの修正版以降に更新するよう求めた[6]。
The Hacker Newsによると、OpenAIは公開した修正で、Gitが「要求したコミットSHAをブランチ名と解釈しうる」ため、プラグインの取得元が「固定したものと別のコミットを実体化しうる」と書いた[7]。The Hacker Newsは根本のGitの挙動を手元の試験で再現し、Anthropicの2.1.179のリリースノートは修正に触れておらず、修正済みという説明はAir Securityのものだとも報じた[7]。
Air Securityは、Gemini CLIの利用者にAntigravityへの移行を勧め、Antigravityにはマーケットプレイスのプラグインの固定が無いため、この攻撃は届かないとした[6]。Googleの5月19日の告知によると、企業向けのライセンスでの利用は変わらず、Gemini CLIの提供を続ける[13]。
未公表の事項
- Codex・GitHub Copilot・Gemini CLIの分のCVEの割当
- OpenAIとMicrosoftのセキュリティアドバイザリ
- エージェントの更新で、既に差し替えられたプラグインが除かれるかどうか
- 企業向けのGemini CLIの更新に、この不備の修正が含まれるかどうか
- 数百万のエージェントが脆弱とした根拠の数値
注
出典
当事者
- [1]Anthropic PBC『Claude Code changelog』(2026年6月16日公開、2026年11月4日閲覧)
- [2]OpenAI『Codex changelog』(2026年7月29日公開、2026年11月4日閲覧)
- [3]Microsoft Corporation『Visual Studio Code 1.136』(2026年9月2日公開)
公的機関
- [4]CVE Program『CVE-2026-86063: Claude Code: Plugin Hash Pin Bypass Allows Bypass of Hash Pinning』(2026年10月13日公開)
- [5]National Institute of Standards and Technology『CVE-2026-86063』(2026年10月13日公開)
調査・観測
- [6]Air Security『Plugin4Shell - Zero Click RCE Vulnerability found in top 4 most popular coding agents, millions of agents affected』(2026年9月17日公開、2026年11月4日更新)
報道機関
- [7]The Hacker News『Plugin4Shell Lets Repository Owners Swap Pinned Plugin Code Across Four AI Coding Agents』(2026年9月18日公開)
- [14]Help Net Security『Zero-click RCE vulnerability hit four major AI coding agents, two remain unpatched』(2026年9月18日公開)
背景資料
- [8]Anthropic PBC『Marketplace reference(Claude Code Docs)』(公開日不明、2026年11月4日閲覧)
- [9]Anthropic PBC『Discover and install plugins(Claude Code Docs)』(公開日不明、2026年11月4日閲覧)
- [10]GitHub, Inc.『Dealing with special characters in branch and tag names(GitHub Docs)』(公開日不明、2026年11月4日閲覧)
- [11]GitHub, Inc.『GitHub Copilot CLI plugin reference(GitHub Docs)』(公開日不明、2026年11月4日閲覧)
- [12]Google LLC『Extensions reference(Gemini CLI)』(2026年5月14日公開)
- [13]Google LLC『An important update: Transitioning Gemini CLI to Antigravity CLI』(2026年5月19日公開)
更新記録
- 2026年9月22日:公開した。
- 2026年10月13日:CVE ProgramのCVE-2026-86063のレコード(出典4)とNISTのNVDの登録(出典5)を加え、評価と影響を受ける版を示して「脆弱性の内容」「時系列」「対象の製品と版」を改めた。
- 2026年11月4日:Air Securityの報告の11月4日の更新(出典6)で示されたCVEの割当とGitHub Copilotの修正を「時系列」「対象の製品と版」「修正と回避策」に加え、リードの最後の文と「注」を改めた。
