Claude Code 符号链接还会读到目录外吗

2.1.251 修复:权限检查之后工作区内的符号链接被换成指向目录外时,Read/Write/Edit 不再跟出去。Grep/Glob 的 deny 也对符号链接路径生效。

Claude Code 符号链接还会读到目录外吗

claude code 符号链接会读到目录外吗:2.1.251 之前,文件工具(Read、Write、Edit)先做权限检查,再沿符号链接走。检查通过后,若工作目录里那个链接被换成指向批准范围之外的路径,工具仍会跟出去读或写。这是检查与使用之间的空档,不是「一开始就允许读 ~/.ssh」。同版本 Grep 和 Glob 对经过符号链接搜到的文件,也会套用 Read(...) deny 规则。

作者CodePass 技术编辑

旧洞实际能造成什么

攻击面是:会话已批准读 ./vendor/foo,随后 foo 被换成指向 /etc/passwd 或仓库外密钥的符号链接。Agent 再 Read 同一路径,旧客户端可能给出目录外内容。恶意 checkout、被投毒的 node_modules、或并行进程在改链接时,这个空档才有意义。普通自己建的软链指向仓库内另一文件,不是这次修复的目标。

Workflow 工具也曾在权限检查前读取(并在报错里引用)会话无权读的 scriptPath。2.1.251 一并修了。三条不要混成「所有路径问题都修完了」。

升级后仍要自己做的

claude --version 到 2.1.251+。只升 VS Code 插件、CLI 仍停在旧版,文件工具还是旧逻辑。

deny 规则继续写清楚,例如不让读 **/.env**/*.pem。Grep/Glob 旧版会绕过符号链接上的 Read(...) deny,升完才能指望搜路径也被拦。不可信仓库仍应先在受限环境打开,不要把「已经打补丁」当成信任任意 checkout。

项目 settings 同版本不能再打开详细 beta 追踪或裸 API body 日志。泄露面收的是日志,不是符号链接。

怎么确认自己在新逻辑上

没有官方「检测命令」。可在一次性目录里:批准范围内放一个文件,会话中途把同名路径改成指向目录外的链接,再让 Agent Read。新版本应拒绝或读失败;旧版本可能读到外面。不要在含真实密钥的盘上做这个试验。

编辑器交换文件、*.tmp 密钥副本是另一条上传问题,/ultrareview 在 2.1.248 已过滤。和符号链接 TOCTOU 不是同一个补丁。

Bash 算术赋值也曾被自动放行

同版本还修了:给整型 shell 变量赋算术表达式(例如 OPTIND=1/0RANDOM=2+2)时,权限检查会当成无害赋值自动过。现在会弹出批准。和符号链接不是同一漏洞,但都是「看起来像安全操作、实际可越权」的 Bash 边角。升级后若突然多了很多算术赋值的批准窗,这是预期。

参考资料