2026年6月25日、AnthropicはClaude Code脆弱性の新しいセキュリティアドバイザリGHSA-7835-87q9-rgvvCVE-2026-55607)を公開した。悪意あるリポジトリをcloneしてClaude Codeを走らせるだけで、エージェント自身のworktree操作が踏み台となり、macOSのseatbeltサンドボックスの外でコードが実行されるというものだ。修正版は2.1.163で、npmレジストリ上の公開は2026年6月4日。本記事では、アドバイザリ・報告者の公開write-up・NVD・npmレジストリという一次情報だけを使い、攻撃チェーンの仕組み・深刻度が割れている理由・自分の環境での確認手順を整理する。

この記事はAIコーディングエージェント固有の脆弱性を扱います。開発基盤を狙う攻撃手法と防御ツールの全体像は サプライチェーンセキュリティ2026|攻撃手法・防御ツール・実践チェックリスト にまとめています。

CVE-2026-55607の時系列。2026年5月11日にHackerOneへ報告、5月27日にHigh判定、6月4日に2.1.163で修正、6月25日にGHSA公開、6月29日にNVD登録。
報告から公開までの時系列。日付はGHSANVD報告者write-up・npmレジストリの公開値にもとづく

30秒でわかるClaude Code脆弱性CVE-2026-55607

要点
  • 何が起きるか: 悪意あるリポジトリをcloneしてClaude Codeを実行すると、.gitという名前のworktree・symlink・core.fsmonitorの連鎖で~/.zshenvが上書きされ、seatbeltサンドボックスの外でコードが実行される
  • 影響範囲: @anthropic-ai/claude-code2.1.38 以上 2.1.163 未満。修正版 2.1.163 は2026年6月4日公開。脆弱な状態が続いた期間は114日
  • 深刻度: NVDは8.8(CVSS 3.1)、GitHubは7.7(CVSS 4.0)と出典で割れる。採点バージョンの違いによるもので、どちらもHigh
  • 対策: 2.1.163以降へ更新するだけで、追加設定は不要。ただし確認はclaude --versionだけでは足りない(PATH先頭の1つしか見えない)。

何が起きたのか — 4段の連鎖でサンドボックスの外へ

アドバイザリの記述はごく短い。「Claude Codeのworktree処理は.gitという名前のworktreeの作成と、サンドボックスの文脈外にあるworktreeへの移動を許しており、gitディレクトリの混同攻撃を可能にしていた」というものだ。そして「worktree操作の最中にsymlinkの操作とgitのfsmonitorの実行を悪用することで、攻撃者は利用者のホームディレクトリのファイル(.zshenvなど)を上書きでき、seatbeltサンドボックスの制限の外でのコード実行に至る」と続く。

この一文に、性質の異なる4つの要素が畳み込まれている。報告者の公開write-upとあわせて読むと、それぞれが単独では「仕様の範囲」に見えるものの、順番に噛み合ったときだけ境界が破れる構造だと分かる。

flowchart TD A[悪意あるリポジトリをclone
ルート直下がgitディレクトリとして
成立する構造になっている] --> B[CLAUDE.md 内のプロンプトインジェクション
エージェントに手順を1つずつ実行させる] B --> C[1段目: .git という名前の worktree を作成
gitdir の解決先が混同される] C --> D[2段目: worktree の保存先が symlink で
ホームディレクトリを指す] D --> E[3段目: git status の実行で
core.fsmonitor に指定されたコマンドが動く] E --> F[4段目: ~/.zshenv が上書きされる] F --> G[zsh 起動時 seatbelt 適用前に読み込まれ
サンドボックスの外でコードが実行される]

1段目:.git という名前のworktree

gitでは、リポジトリのメタデータは.gitという名前の場所に置かれる。ここに同じ名前のworktreeを作れてしまうと、gitが「どこをgitディレクトリとみなすか」の解決が揺らぐ。報告者はこれを「gitディレクトリの混同(git directory confusion)」と呼び、3つある独立したバグの1つ目として挙げている。

なお、素のgitコマンドでgit worktree add .gitとだけ実行すると、手元のgit 2.39.3では fatal: '.git' is not a valid branch name として弾かれる。ただしこれはworktreeのパスからブランチ名を導出する過程で引っかかっているだけで、.gitという名前そのものを拒否しているわけではない。実際、-bでブランチ名を明示し、既存の.gitと衝突しない場所を指定して試すと、gitは.gitという名前のworktreeを問題なく作成する。

つまりgitは.gitという基底名を禁止していない。これを弾くかどうかは、worktreeを作る側のツールの責任範囲にある。2.1.163の修正は、Claude Code側でその受け入れを拒否するものだ。

次に効くのが、worktreeの保存先がsymlinkだった場合にそれを追ってしまうという挙動だ。write-upによれば、.claude/worktreesをホームディレクトリを指すsymlinkに差し替えることで、以降のworktree作成がプロジェクトの外へ向かう。サンドボックスは「この作業ディレクトリの外に書くな」という境界を敷くが、境界の内側に置かれたsymlinkが外を指していると、書き込み先だけが静かに外へ移動する。

この「symlink追従」は本件に固有の弱点ではない。同じClaude Codeで2026年4月20日に公開されたCVE-2026-39861(2.1.64で修正)も、サンドボックス内のプロセスが作業領域外を指すsymlinkを作れてしまい、非サンドボックスのアプリ側がそれを追って書き込む、という構図だった。AIコーディング支援ツール全般で同じ構造が繰り返し見つかっている点は、GhostApproval・SymJack解説|AIコーディング支援6種のsymlink承認ハイジャック で整理している。

3段目:core.fsmonitor というコード実行の口

ここが本件のもっとも重要な部分だ。core.fsmonitorはgitの正規の設定項目で、ファイルシステムの変更監視を外部プログラムに任せてgit statusなどを高速化するためのものである。gitの公式ドキュメント(git help config)は、この設定について「フックベースのファイルシステムモニタと同様に、多数のファイルを含む作業ディレクトリでgitのインデックス更新が必要なコマンド(例:git status)を高速化できる」と説明し、真偽値のほかにフックのパス名を指定できると明記している。

つまりcore.fsmonitorは、指定されたコマンドがgit statusのような日常的な操作のたびに起動する設定である。これは意図された機能であり、gitのバグではない。しかし攻撃者が用意したリポジトリのgit設定にこの項目が仕込まれていれば、エージェントがworktree操作の過程で何気なくgit statusを走らせた瞬間に、攻撃者のコマンドが動く。報告者はこれを「gitのcore.fsmonitorは、ありふれたコマンドで発火するコード実行のシンクだ」と表現している。

Gitの正規機能がエージェント経由で攻撃の起点になる構図は他ツールでも観測されており、Cursorの事例は Cursor IDE脆弱性CVE-2026-26268解説|Gitフックで任意コード実行、影響バージョンと対策 にまとめている。

4段目:~/.zshenv はサンドボックスより先に読まれる

最終段は、実行したいコードを~/.zshenvに書き込むことだ。ここで効くのがzshの起動順序である。zshは起動時に~/.zshenvを最初期に読み込む。write-upは、macOSではこのファイルが「seatbeltプロファイルが適用される前に」読まれると指摘している。

この一点が、本件を「ファイル書き込み」ではなく「サンドボックス脱出」にしている。サンドボックスは、その中で起動されるコマンドの権限を絞る仕組みだ。しかし、シェルそのものが立ち上がる過程で読む初期化ファイルを書き換えられてしまえば、制限が掛かる前に攻撃者のコードが評価される。報告者はこの点を「シェルが制限の適用前に攻撃者の~/.zshenvを読み込むなら、ペイロードのコマンドをサンドボックス化しても意味がない」と要約している。

2.1.163の修正範囲。4段の連鎖のうち入口である「.gitという名前のworktree」だけが拒否されるようになり、symlinkとcore.fsmonitorの仕組み自体は残る。
2.1.163で塞がれたのは連鎖の入口。fsmonitorが実行される仕組み自体はgit側の正規動作として残る

報告者は独立した3つのバグとして、①.gitをworktree名として受け入れたこと、②worktree作成時にsymlinkを追ったこと、③ホームディレクトリへの書き込みを明示的な承認なしに許したこと、を挙げている。2.1.163が塞いだのは①である。

なぜ「サンドボックス有効」でも防げなかったのか

本件でもっとも誤解されやすいのが、この点だ。報告者は、サンドボックスを有効にし、bashの自動承認を無効にした最も制限の強い設定でも成立したと述べている。

理由は前節のとおり、最終段がシェルの初期化ファイルだからである。サンドボックスは「実行されるコマンド」に対する制限であり、「シェルが起動する前に読むファイル」は制限の対象より前段にある。順序として先にあるものは、後から掛かる制限では守れない。

この構造は、設定ファイルを書き換えられると防御が無効化されるという点で、同じClaude Codeで報告されたClaude CodeのMCP通信ハイジャックでOAuthトークンが窃取される攻撃|検知・対応・防御の手順 と発想が近い。ただし両者は別の事象である。MCP通信ハイジャックはCVEが採番されずAnthropicが「設計上の挙動・対象外」と分類しパッチも出していないのに対し、本件はCVEが採番され2.1.163で修正されている。「設定ファイルが権限の実体を握っている」という共通の教訓はあるが、対応の要否がまったく違う。

⚡ 自分の環境を確認する

最初にやるべきことは、動いているClaude Codeのバージョンをすべて数えることだ。ここには実務上の落とし穴がある。

claude --versionだけではPATH先頭の1つしか見えず、npm global側に残った2.1.87のような古い実体を見落とす。which -aで全実体を列挙する必要がある。
検証環境では、PATH先頭が2.1.220である一方でnpm global側に2.1.87(影響範囲内)が残っていた

claude --versionは、PATHの先頭で見つかった1つの実体のバージョンしか表示しない。Claude Codeはネイティブインストーラ経由とnpmグローバル経由の両方で導入でき、両者は別々の場所に入る。実際、本記事の検証環境では次の状態になっていた。claude --versionは2.1.220(修正済み)を返すが、npmグローバル側には2.1.87が残っており、これは影響範囲の2.1.38以上2.1.163未満に該当する。PATHの順序が違うシェルやCIのコンテキストでは、古い方が動きうる。

# 1. claude の実体をすべて列挙し、それぞれのバージョンを確認する
which -a claude
for p in $(which -a claude); do printf '%s -> ' "$p"; "$p" --version; done

# 2. npm グローバル導入分を個別に確認する
npm ls -g @anthropic-ai/claude-code --depth=0

# 3. CI・コンテナに固定バージョンが残っていないか探す
grep -rn "@anthropic-ai/claude-code@2\.1\." . --include=Dockerfile --include="*.yml" --include="*.yaml" --include="package.json" 2>/dev/null

2の結果や3で見つかった固定指定が2.1.38以上2.1.163未満なら、その経路は影響範囲内である。

次に、影響期間中に素性の分からないリポジトリをエージェントに解析させた覚えがある場合の痕跡確認を挙げる。断定的な侵害判定に使えるものではないが、連鎖の各段が残す形跡を見る位置づけだ。

# シェル初期化ファイルに見覚えのない追記がないか(最終段の書き込み先)
ls -la ~/.zshenv ~/.zshrc ~/.bashrc ~/.profile 2>/dev/null
tail -n 20 ~/.zshenv 2>/dev/null

# worktree の保存先が symlink にすり替わっていないか(2段目)
ls -la .claude/worktrees 2>/dev/null
find . -maxdepth 4 -type l -name "worktrees" 2>/dev/null

# リポジトリの git 設定に見慣れない fsmonitor が入っていないか(3段目)
git config --get core.fsmonitor
git config --list --show-origin | grep -i fsmonitor

git config --get core.fsmonitorが何も返さなければ設定されていない。値が返る場合は、それが自分で入れた高速化設定(trueやチームで合意したツールのパス)なのかを確認する。身に覚えのないパスが入っていれば要調査である。

確認の順序に注意
シェル初期化ファイルの点検は、まず更新を済ませてから行う。古い実体が残ったままリポジトリを触り直すと、確認作業そのものが同じ経路を踏む可能性がある。

深刻度が 8.8 と 7.7 に割れている理由

本件を調べると、参照先によって深刻度の数字が違う。これは矛盾ではなく、採点しているバージョンと組織が違うためである。

NVDはCVSS 3.1で8.8、GitHubはCVSS 4.0で7.7。4.0だけが持つAT:P(攻撃要件あり)が減点として効いている。
同じ脆弱性に2つのスコアが並ぶ。どちらもHighである点は変わらない
項目 NVD(NIST) GitHub Advisory
CVSSバージョン 3.1 4.0
スコア 8.8 High 7.7 High
ベクタ AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
利用者の関与 UI:R(必要) UI:P(受動的)
攻撃要件 該当する指標なし AT:P(特定条件が必要)
登録日 2026-06-29 2026-06-25

差を生んでいるのは主にAttack Requirements(AT)という指標だ。CVSS 4.0の仕様書は、AT:Pを「攻撃の成功が、攻撃を可能にする特定の配備・実行条件の存在に依存する」場合と定義している。本件は「プロンプトインジェクションを含む悪意あるリポジトリをcloneして、そこでエージェントを走らせる」という条件が必要なので、4.0ではここで減点される。一方CVSS 3.1にはこの軸自体が存在せず、条件付きであることを減点に反映できない。

もう1つの差は利用者の関与の表現だ。CVSS 4.0はUser Interactionを None / Passive / Active の3段階で区別し、Passiveを「対象利用者による限定的な関与が必要で、その関与は意図せざるものであり、利用者が保護機構を能動的に破ることを要求しない」と定義する。3.1はRequired / Noneの2値しかないため、同じ状況をUI:Rとしか書けない。

実務上の結論はシンプルで、どちらもHighであり、低い方の数字を根拠に対応を先送りする理由にはならない。むしろUI:P(受動的)という評価は、「利用者が特別に危険な操作をしたわけではない」という意味であり、日常的なclone→解析の流れで踏みうることを示している。

Claude Code脆弱性の影響範囲と前提条件

項目 内容
パッケージ @anthropic-ai/claude-code(npm)
影響バージョン 2.1.38 以上 2.1.163 未満
修正バージョン 2.1.163(npm公開 2026-06-04)
脆弱な期間 114日(2.1.38 の公開 2026-02-10 から起算)
CWE CWE-22(パストラバーサル)/CWE-59(リンク解決の不備)/CWE-78(OSコマンドインジェクション)
成立の前提 プロンプトインジェクションを含む悪意あるリポジトリのclone+そのリポジトリでのClaude Code実行
サンドボックス有効時 防げない(最終段が seatbelt 適用前に読まれる ~/.zshenv のため)
実証環境 macOS上の Claude Code v2.1.139(報告者write-up)
対策 2.1.163以降へ更新。追加設定は不要

影響バージョンの下限2.1.38がnpmに公開されたのは2026年2月10日、修正版2.1.163の公開は6月4日である。両者の差は114日で、この間に導入・固定されたバージョンは影響範囲に入る。標準の自動更新を使っている環境はすでに修正版へ到達しているが、固定バージョンを使うCI・コンテナ・オフライン環境が残存リスクの中心になる。

前提条件は軽くない一方で、日常操作から遠いわけでもない。「知らないリポジトリをcloneしてエージェントに読ませる」はAIコーディングの典型的な使い方であり、CLAUDE.mdのようなエージェント向け指示ファイルが攻撃者の制御下にある点が本件の肝である。

worktree・symlinkは繰り返し塞がれている

本件を単発の不具合として見ると全体像を見誤る。GitHub Security Advisories APIでanthropics/claude-codeのアドバイザリを取得し、公開日と概要で並べると、同じ系統の攻撃面が2026年に繰り返し塞がれていることが分かる。

2026年に公開されたworktree・symlink系のアドバイザリ一覧。2月のsettings.json設定注入から6月のworktreeパス混同まで5件が並ぶ。
GitHub Security Advisories APIの公開日と概要から集計。worktreeを名指しするものが2件、symlinkを名指しするものが3件
公開日 CVE 概要 深刻度
2026-02-06 CVE-2026-25725 settings.json への永続的な設定注入によるサンドボックス脱出 High
2026-02-06 CVE-2026-25724 シンボリックリンク経由での拒否設定のバイパス Low
2026-04-20 CVE-2026-39861 symlink追従で作業領域外への任意ファイル書き込み(2.1.64で修正) High
2026-04-24 CVE-2026-40068 git worktreeのなりすましによる信頼ダイアログの回避 High
2026-06-25 CVE-2026-55607 git worktreeのパス混同によるサンドボックス脱出(2.1.163で修正) High
2026-06-25 CVE-2026-46406 /copyコマンドの一時ファイル経由でのsymlinkベースのファイル書き込み Medium

パス解決・symlink・信頼境界という同じ土俵で、報告者も異なるまま複数回の修正が重ねられている。これは製品が特別に脆いことを意味するのではなく、エージェントに与えたツールがそのまま攻撃面になるという構造的な性質を示している。報告者の言葉を借りれば「AIコーディングエージェントのツールは攻撃面である」ということだ。

エージェントがgit worktreegit statusを自律的に実行できるということは、gitの設定に仕込まれた副作用も自律的に踏むということでもある。エージェントに許可するコマンドを考えるとき、そのコマンドが読む設定ファイルを誰が書けるのかまで含めて見る必要がある。

対策と運用

やることは1つで、2.1.163以降へ更新する。追加の設定変更は不要である。

# ネイティブインストーラ経由の場合(自動更新が有効なら通常は到達済み)
claude update

# npm グローバル経由の場合
npm install -g @anthropic-ai/claude-code@latest

更新後に、前掲のwhich -a claudeすべての実体が2.1.163以降になったことを確認する。片方だけ更新して安心するのが典型的な失敗である。

この記事のポイント(更新時に押さえる3点)
更新の判定基準は 2.1.163。これ未満はすべて影響範囲で、2.1.163 以降なら連鎖の起点が塞がれている
実体は1つとは限らない。ネイティブ版とnpmグローバル版は別の場所に入るため、which -a claude で列挙してから個別に確認する
自動更新が効かない経路が本丸。Dockerfile・CI設定・オフライン環境に固定された 2.1.x は、放置すると影響範囲のまま残り続ける

運用面では、次の3点が本件から引ける実務的な示唆になる。

素性の分からないリポジトリは、まずエージェントを外して開くCLAUDE.mdのようなエージェント向け指示ファイルは、攻撃者が最初に置く場所である
固定バージョンの棚卸しを定期化する。自動更新が効かないCI・コンテナ・オフライン環境が、この種のCVEでは最後まで残る
シェル初期化ファイルを変更検知の対象に含める~/.zshenvはサンドボックスより前に読まれるため、どんなサンドボックス設定を入れてもこのファイルの保護にはならない

よくある誤解

「サンドボックスを有効にしていたから大丈夫」ではない。報告者は最も制限の強い設定でも成立したと述べている。最終段がseatbelt適用前に読まれるファイルだからである
「7.7だから8.8より軽い」ではない。両者は別バージョンのCVSSによる採点で、どちらもHighである
claude --versionが修正版だから安全」ではない。PATHの先頭1つしか見えず、別経路で入った古い実体は映らない
「gitのバグ」ではないcore.fsmonitorが指定コマンドを実行するのは公式に文書化された正規機能であり、問題はエージェントが攻撃者の制御下にあるgit設定を踏む経路にあった
「CVEが出たばかりの新しい話」ではない。GHSA公開は2026年6月25日、修正版2.1.163の公開はさらに前の6月4日である。速報として身構えるより、固定バージョンが残っていないかの棚卸しに時間を使うほうが実益が大きい

参照ソース(一次ソース優先)

GHSA-7835-87q9-rgvv — Sandbox Escape via Git Worktree Path Confusion Allows Unsandboxed Code Execution(Anthropic公式アドバイザリ。影響範囲・修正版・機構の記述)
Metnew/write-ups — claude-code-worktree-sandbox-escape(報告者による公開write-up。開示タイムライン・3つのバグの整理・報告者自身の主張)
NVD — CVE-2026-55607(CVSS 3.1での採点8.8・CWE分類・登録日)
CVSS v4.0 Specification Document — FIRST(Attack Requirements・User Interactionの定義)
GitHub Security Advisories — anthropics/claude-code(同系統アドバイザリの公開日・概要の集計元)
npm registry — @anthropic-ai/claude-code(2.1.38・2.1.163の公開日)