Claude Code 沙箱逃逸 CVE-2026-55607 打开恶意仓库就能被控制
CVE-2026-55607 允许攻击者通过构造 git worktree 名为 .git 的路径混淆,结合 symlink 和 core.fsmonitor 覆写 ~/.zshenv,在沙箱外执行任意代码。2.1.163 已修复。

CVE-2026-55607 是 Claude Code 2.1.38 到 2.1.162 版本中存在的一个沙箱逃逸漏洞。攻击者通过构造恶意 Git 仓库,利用 worktree 路径混淆 + symlink 跳转 + zshenv 覆写,实现在 macOS 沙箱外执行任意代码。2.1.163 及以后版本已修复。如果你开启了自动更新,已经安全。
攻击链详解
这个漏洞的攻击链有四步,每一步利用了一个不同的缺陷:
第一步:worktree 名称未验证。Claude Code 的 worktree 创建代码没有禁止 .git 作为 worktree 名称。攻击者(通过 CLAUDE.md 中的 prompt injection)让 Agent 执行 git worktree add .git。这让仓库根目录变成了一个合法的 gitdir,攻击者控制的配置文件开始控制后续所有 Git 操作。
第二步:symlink 逃逸。.claude/worktrees 下的 symlink 指向 $HOME。Claude Code 的 worktree 处理没有限制 symlink 解析的范围,允许 symlink 指向项目目录之外。
第三步:fsmonitor 写入。攻击者的 Git 配置里包含 core.fsmonitor 指令,指向一个恶意脚本。结合前两步,这个脚本被写入到了 ~/.zshenv。
第四步:沙箱逃逸。macOS 上 zsh 启动时会无条件读取 ~/.zshenv,这个读取发生在 Seatbelt 沙箱配置文件应用之前。所以写入 ~/.zshenv 的恶意代码在下一次 shell 启动时以完全无沙箱的状态执行。
根本原因
SecureLayer7 的分析指出两个根本原因:
- 输入验证缺失:worktree 创建代码没有把
.git列入黑名单 - symlink 未限制:worktree 创建过程中的 symlink 解析没有约束在项目目录内
这两个问题单独存在时影响有限。组合起来就让攻击者可以把 worktree 路径和 Git 自身的元数据目录混为一体,从而接管整个 Git 配置。
最终的逃逸利用了 zsh 和 macOS 沙箱的启动顺序:~/.zshenv 在沙箱策略之前被读取。这不是 Claude Code 自身的 bug,而是 macOS 平台的行为,但 Claude Code 没有防御这个已知的逃逸路径。
触发条件
攻击需要以下条件全部满足:
- 用户打开了一个包含恶意 CLAUDE.md 的 Git 仓库
- Claude Code 版本在 2.1.38 到 2.1.162 之间
- 使用了 Agent 模式或 auto-approve 模式(需要 Agent 执行 git worktree 命令)
- 系统为 macOS(逃逸利用了 zsh + Seatbelt 的特定行为)
修复和自查
claude --version # 确认 ≥ 2.1.163
如果版本低于 2.1.163:
npm install -g @anthropic-ai/claude-code@latest
自动更新的用户已经自动收到了修复。手动更新的用户需要自己执行升级。
防御建议:不要在 Agent 模式下直接打开不信任的仓库。如果必须审查陌生仓库的代码,先手动检查 CLAUDE.md 和 .git/config 是否包含异常内容。这个建议同样适用于 Git 配置劫持漏洞等同类攻击。