「コミットハッシュで固定しているから、中身が差し替わることはない」。プラグインやライブラリの供給網を守る対策として、よく使われる前提だ。ところがClaude Codeでは、この前提そのものが成立していなかったことが2026年10月に公式のセキュリティアドバイザリで明らかになった。何が起きたのか、そしてこの前提のどこが崩れたのかを整理する。

何が起きたか

GitHubのセキュリティアドバイザリ(GHSA-pq7j-f95f-qfcv、CVE-2026-86063)によると、Claude CodeとClaude Desktopのプラグインインストール処理は、マーケットプレイスが指定した40文字のコミットSHAをgit checkoutでチェックアウトする際、チェックアウト後のHEADが実際にそのSHAと一致しているかを検証していなかった。

プラグインの配布元リポジトリを攻撃者が支配できる場合、固定対象の40文字SHAとまったく同じ名前のブランチを作成できる。するとgit checkoutはピン留めされたコミットではなく、攻撃者が用意したブランチの先端を黙って解決してしまう。レビュー済みのはずのコミットが、見た目は同じハッシュ値のまま中身だけ攻撃者のコードに差し替わる格好だ。深刻度はHigh、CVSS 4.0スコアは7.7(ユーザーの操作は必要だが、ネットワーク越しに成立し、機密性・完全性・可用性のすべてに高い影響がある、という評価)。影響を受けるのは2.1.179より前のバージョンで、修正は2.1.179で入っている。自動更新を使っているユーザーはすでに修正を受け取っており、手動更新のユーザーだけが対応を要する。発見・報告はAir SecurityのOr Nevo Michrowski氏によるもので、アドバイザリにも謝辞が明記されている。

どの前提が崩れたのか

ここで崩れたのは「ピン留め(特定のコミットSHAを指定する運用)さえしていれば、中身の改ざんは防げる」という前提だ。ピン留めは「最新版を自動追従しない」ことは保証するが、「指定した文字列が、本当にその通りに解決されるか」までは保証しない。検証のロジックに抜けがあれば、ピン留めという運用上の安全策は機能しない。

この構造は、SKILL.mdファイルを使うAgent Skillsや、設定ファイル経由で自動実行されるnpmの依存パッケージですでに扱ってきた話と地続きだ。AIエージェントに外部から機能を追加する経路——プラグイン・スキル・MCPサーバー・依存パッケージ——は、どれも「エージェント本人と同じ権限で動く」という共通点を持つ。入り口の形が違うだけで、「外部から取り込むコードをどう検証するか」という論点は同じところに帰着する。

他のAIコーディングエージェントでは何が違ったか

同じ脆弱性は、複数の独立した海外メディア(The Register・InfoWorld・TheNextWeb等)が「Plugin4Shell」という名前で報じており、Claude Code以外のAIコーディングエージェントにも共通する仕組みの欠陥として扱われている。各社の対応は分かれた。報道が一致して伝えているのは、Claude Codeは2.1.179で、OpenAI Codexは0.146.0でそれぞれ修正済みという点、GitHub Copilotは本稿執筆時点で修正が出ておらず、GitHub側は「自社のプラットフォームではSHAと同名のブランチ・タグの作成自体を制限しているため、GitHub上でホストされたマーケットプレイスでは悪用されない」とコメントしている点、Google発表のGemini CLIは、ツール自体を非推奨としたため修正の予定がなく、後継の開発環境への移行を案内している点だ。

⚠️ 本記事のうちClaude Code固有の事実(CVE番号・深刻度・影響バージョン・修正バージョン・発見者)は、GitHubの公式アドバイザリをWebFetchで直接確認したうえで記載している。一方、他社エージェントの対応状況や「Plugin4Shell」という呼称については、本セッションのネットワークポリシーにより各社の一次発表・研究者本人の発表ページへ直接アクセスできなかったため、複数の独立した報道が一致している範囲の事実のみを採用し、発見・公開の正確な日付はあえて特定していない。

読者へ:何を確認すべきか

ここで聞くべきことは「Claude Codeが悪いか」ではなく、「自社が外部から取り込んでいるコードの検証を、ツール側の実装に丸投げしていないか」だ。

この3問に即答できないなら、まず埋めるべきは新しいツールの導入ではなく、既存の拡張機能の棚卸しだ。自社の拡張機能の許可・禁止ルールを一緒に整理したい場合は、パイロット・構築のフェーズで相談できる。まずは30分の無料診断から。