Claude Code 2.1.268 修复两条 deny-rule 绕过漏洞:最高优先更新,Agent 安全护栏收紧
9 月 10 日发布的 Claude Code 2.1.268 修掉了两条 deny 规则静默失效的漏洞——你写下的禁止项,在某些路径下根本没生效。对把 .env、密钥和凭证托付给 coding agent 的团队来说,这是一次必须先更新再谈其他的版本。
两条绕过路径:符号链接与"无法解析的同行命令"

第一条与符号链接有关。macOS 上的 /etc、/tmp、/var,以及 Linux 上的 /bin,本身都是指向真实位置的符号链接。当路径以真实位置而非链接写法给出时,写在链接目录上的 deny 与 ask 规则不会生效;反过来,Bash 命令也会忽略按链接写法书写的 deny 规则。两个方向都能绕,等于规则在链接这条路上是敞开的。第二条更隐蔽:同一行里如果出现 env -C、eval 之类权限检查器无法解析的命令,那么这一行上的 Read 或 Edit deny 规则就可能不生效。两条问题属于同一类——你写下的禁止,实际上没有在执行。官方说明把修复后的行为对齐为:按真实路径给出时规则同样生效,同一行含不可解析命令时也照常拦截。
一并补掉的密钥泄露面

同一个版本还封掉了五处会把秘密写进错误信息的路径。插件与市场报错时,会直接显示 git 源地址里携带的 token 或密码;/mcp 与 /plugin 的服务详情、claude mcp list 和 get 的输出,以及 MCP 登录失败信息,会把 MCP 配置里 ${VAR} 占位符解析后的明文密钥打印出来。与权限相关的还有一条:被复活的进程内 teammate 会从一个未受信任目录里的同名 agent 文件读取工具列表和系统提示词,等于从旁边绕开了信任边界。如果你习惯用环境变量给 MCP 服务器传凭据,这次更新之后值得翻一遍历史日志,确认没有不该出现的字符串留在里面。这不是功能更新,是善后。
为什么必须"先更新再说"

把背景补齐,这次更新的优先级会更清楚。2.1.268 一共包含 59 项修复和 11 项新增功能,发布日距离上一个版本 2.1.267 只隔了一天,官方在随后一周的开发者周报里给的定调是:如果你依赖 deny 规则保护代码库,先更新,再看别的。原因是 deny 规则在权限体系里的位置最靠前——判定顺序是 deny、ask、allow,具体程度不会改变这个顺序,一个很窄的 allow 规则也撬不开一条很宽的 deny。也正因为如此,规则被绕过时不会有任何提示,开发者通常毫不知情。同一版本还修了 2.1.265 起在第三方 Anthropic 兼容端点(通过 ANTHROPIC_BASE_URL 配置)上每一轮对话都返回 HTTP 400 的回归问题,并在 2.1.269 里补了一条:以 ! 开头的 deny 或 ask 规则此前会越出写入它的配置源生效,现在只在本源内生效。
单靠 deny 规则不够:纵深防御怎么搭

多条现场报告指出,permissions.deny 曾在生产版本中静默失效,导致被显式拒绝的文件仍被读取而不触发询问,因此业内共识是把它当作第一层而非唯一控制。更可靠的第二层是 PreToolUse hook:它在权限系统之前运行,可以读取工具入参并直接返回拒绝决定,代价是只能拦 agent 自己的 Read/Edit 工具,拦不住它拉起的子进程。第三层是沙箱级控制,Claude Code 的 sandbox.credentials 配置在该版本线里被用于阻止沙箱内子进程读取凭据文件和密钥环境变量,正好补上 hook 的缺口。第四层是 .gitignore 加文件发现:默认的 respectGitignore 能让敏感文件不出现在建议列表里,但 agent 仍可对 gitignore 文件发起显式读取,所以这一层必须由 deny 规则兜住。四层叠加,才谈得上"规则真的在生效"。
注意事项
本文基于官方版本说明与第三方开发者周报整理,未在本地复现漏洞。版本号、发布时间与条目数量以官方发布记录为准,不同渠道对"修复项"与"改进项"的归类口径略有差异(26 项改进、59 项修复、11 项新增为常见口径)。漏洞仅描述触发条件,不提供可直接复用的利用写法。sandbox.credentials 与 hook 的能力边界来自第三方安全指南,落地前请以本地实际版本行为为准。deny 规则只约束 agent 的工具调用,不构成操作系统级沙箱。
FAQ
Q:我只用本地 Claude Code 写业务代码,不接 MCP,需要马上更新吗? A:需要,尤其是你写过 deny 规则。这次修复的核心是"禁止项没生效",而不是"多了一个新风险"。哪怕只依赖 deny 挡住 .env 和密钥文件,规则不生效就意味着这些文件随时可能被读进上下文。
Q:deny 规则和 PreToolUse hook,到底该用哪个? A:先用 deny 打底,再用 hook 补强。deny 配置简单、判定顺序最靠前,但历史上出现过静默失效;hook 在权限系统之前运行、可以写更复杂的判断逻辑,但拦不住子进程。两者叠加,再配合沙箱层的凭据隔离。
Q:更新到 2.1.268 之后,我还需要额外检查什么? A:翻一遍 MCP 配置和历史输出。这次修的问题包括错误信息里打印 git token、密码,以及把 ${VAR} 解析后的明文密钥写进日志。更新只能止住后续泄露,已经落在日志里的字符串需要你自己清理。
参考来源
- ClaudeKit(版本更新说明):《Claude Code 2.1.268》
- Claude Code Daily Briefing:《2026-09-11 版本简报》
- Releasebot:《Claude Code Updates & Release Notes(2.1.268)》
- Clauding:《Claude Code 2.1.268: The Gateway Knows the Prices, and the Todo Tools Are Going Away》
- DEV Community:《This week in Claude Code, Codex and Gemini CLI(week of September 13, 2026)》
- AgentPatterns.ai:《Protecting Sensitive Files from Agent Context Access》
- Eesel AI:《A complete guide to Claude Code permissions》
- Claude Fast:《Claude Code Permissions: Safe vs Fast Development Modes》