AIコーディングエージェントのSHA固定回避の脆弱性Plugin4Shell

タグ
国外
目次
  1. 脆弱性の内容
    1. ブランチ名を使う手口
    2. FETCH_HEADという既定ブランチ
    3. 攻撃の経路と自動更新
  2. 時系列
  3. 対象の製品と版
  4. 修正と回避策
  5. 未公表の事項
  6. 注
  7. 出典
  8. 更新記録
  9. 関連記事

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]。

表1:CVE-2026-86063の内容
項目値資料
採番機関GitHub_M⁠[4]
CVSS4.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]
CWECWE-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]。

  1. 良性のプラグインを公開し、マーケットプレイスがそのコミット(aaa…)で固定する⁠[6]。
  2. プラグインが利用者に広まる⁠[6]。
  3. 良性の新版を作り、固定をそのコミット(bbb…)に変えるプルリクエストをマーケットプレイスに出す⁠[6]。
  4. マーケットプレイスの運営者が承認した後、bbb…という名前のブランチを既定にし、悪意あるコードを指させる⁠[6]。
  5. 固定の変更が自動更新を起こし、プロンプトもクリックも無くコードが実行される⁠[6]。

Anthropicの文書では、Claude Codeの自動更新は、claude-plugins-officialなど公式のマーケットプレイスでは既定で有効で、コミュニティ・第三者・ローカルのマーケットプレイスでは既定で無効である⁠[9]。GitHubのCopilot CLIの文書では、組み込みのawesome-copilotマーケットプレイスのプラグインは信頼した作業ディレクトリでセッションの開始時に自動更新され、利用者が加えたマーケットプレイスはautoUpdateをtrueにしたときだけ自動更新される⁠[11]。インストール元には任意のGitのURLを指定できる⁠[11]。

目次へ

時系列

時系列
日付主体内容資料
2026年5月Air Security不備を見つけ、4製品すべてに対して動作するPoCを作った⁠[6]
2026年5月19日GoogleGemini CLIが6月18日にGoogle AI Pro・Ultraと無料の利用者向けの要求の処理を止め、Antigravity CLIに移ると公表した⁠[13]
2026年6月Air Security協調された開示の下で4社に開示した⁠[6]
2026年6月16日AnthropicClaude Code 2.1.179を公開した⁠[1]
2026年6月17日AnthropicClaude Codeの修正を確認した(Air Securityの年表)⁠[6]
2026年7月29日OpenAICodex CLI 0.146.0を公開し、変更一覧に「Verify Git plugin SHA checkouts」(#34644)を載せた⁠[2]
2026年8月4日GoogleGemini CLIは非推奨のため修正を出さないと確認し、Antigravityへの移行を勧めた(Air Securityの年表)⁠[6]
2026年8月12日-Codexの修正が確かめられた(Air Securityの年表)⁠[6]
2026年9月2日MicrosoftVS Code 1.136を公開し、Air Securityの年表ではこの日に修正を確認した⁠[3、6]
2026年9月4日-CVE-2026-86063が予約された⁠[4]
2026年9月17日Air SecurityPlugin4Shellを公表した⁠[6]
2026年10月13日-CVE-2026-86063が公開され〔注1〕、NVDに登録された⁠[4、5]
2026年11月Air Security報告に追記し、CVEの割当とGitHub Copilotの修正を加えた⁠[6]

目次へ

対象の製品と版

表2:製品ごとの影響を受ける版と修正版
製品影響を受ける版修正版資料
Claude Code(CVEの記述ではClaude Desktopも)2.1.179未満2.1.179⁠[4]
Codex-0.146.0⁠[6]
GitHub Copilot-VS Code 1.136.0〔注2〕⁠[6]
Gemini CLI-なし(修正予定なし)⁠[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〕Air Securityの年表は、AnthropicがCVE-2026-86063を公開した日を10月9日としている⁠[6]。
  • 〔注2〕The Hacker NewsとHelp Net Securityは9月18日の記事で、GitHub Copilotの修正は出ていないと報じた⁠[7、14]。

出典

当事者

公的機関

調査・観測

報道機関

背景資料

更新記録

  • 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の修正を「時系列」「対象の製品と版」「修正と回避策」に加え、リードの最後の文と「注」を改めた。

目次へ