如果只能用一句话概括 4 月的安全主题,那就是:能力升级时,边界同步加固。 Opus 4.7 让 Claude 更聪明、更能干——但 Bash 权限、OAuth、sandbox、危险路径检测也同步变严。 下面分四层看。
Bash 权限规则收紧 / wrapper 检测 / read-only 免提示。
OAuth 全链修复 / 钥匙串竞态 / token 撤销自愈。
子进程 PID 隔离 / 网络域名拦截 / 危险路径检测。
条件 hook / Auto Mode 守门 / 不可逆操作必确认。
过去一条 Bash(find:*) 规则放行所有 find——但 find 可以删文件、改权限、执行命令。
v2.1.113 起,find -exec / -delete 单独剥出,需要更明确的授权。
过去 sudo rm -rf 因为 sudo 不在 deny 规则里就放行了——
v2.1.113 起,Bash deny 规则匹配 wrapper:env / sudo / watch / xargs / time 等。
deny rm -rf 时,sudo rm -rf、env rm -rf 同样被拦截。
区分 read 和 write——ls *.ts、cd dir &&、cat、pwd、which
这类纯 read-only 操作不再每次弹权限对话。消除合理摩擦,但不放松对 write 的把关。
修复多个绕过场景:转义 flag(rm -rf\ 这类 trick)、
网络重定向(cmd > /dev/tcp/...)、
env 前缀(FOO=bar cmd)。这些是 red team 找出来的 attack vectors。
Windows 用 PowerShell 时,同样的危险检测逻辑生效——
Remove-Item -Recurse C:\Windows、Stop-Computer、
Set-ExecutionPolicy 等都被识别为危险操作。
这条主线在 4 月所有安全更新里反复出现。它对应"Harmless 不是少做,而是边界清楚"—— Claude 仍然能执行 find -exec、能 sudo、能 PowerShell——但用户必须明确授权,而不是搭便车。
有些 OAuth provider 不返回 expires_in——过去 Claude 假设 1h 过期,每小时弹一次。 v2.1.118 修复——按 provider 实际行为推断。
服务端撤销 token 时,过去客户端死循环重试—— v2.1.118 改为弹出重新授权 UI,不再静默失败。
用户先授权 read 权限——后来需要 write,过去因为已有 token 不再询问。 修复后会显式 re-consent。
多个进程同时访问 Keychain 时,旧 token 覆盖新 token——v2.1.118 加锁。
MCP HTTP OAuth 现在符合 RFC 9728——和外部系统对接的标准合规性提升。
设置 DISABLE_EXPERIMENTAL_BETAS=1 时出现 401 重试循环——v2.1.123 修复。
新增 setting——按域名屏蔽外网请求。 "不让 Claude 访问内网/敏感域名" 用一行配置实现。
Claude 派发的子进程在独立 PID namespace 中—— 杀进程不会误伤宿主,也无法看到宿主进程列表。
/private/{etc,var,tmp,home} 路径——
即使用户授权了 rm -rf,也会再次确认这些路径。
API 流式响应空闲超 5 分钟自动中止并重试—— 避免"挂起的连接"持续耗费配额。
{ "sandbox": {
"network": { "deniedDomains": [
"*.internal", "metadata.google", "169.254.169.254"
] }
}}
最值得强调的一点:哪怕在 Auto Mode(用户主动开启的连续自主执行) 下, Anthropic 仍然要求 Claude 对不可逆操作显式 ask。 不是 AI 决定"用户开了 auto 就什么都行"。
Auto Mode 内置守门规则(节选)
✗ 删除文件 / 分支 / 数据库表
✗ kill 进程
✗ rm -rf
✗ 覆盖未提交的修改
✗ 强推 (push --force)
✗ git reset --hard
✗ amend 已发布的 commit
✗ 移除/降级依赖
✗ 修改 CI/CD 流水线
✗ 推代码 / 创建/关闭/评论 PR / Issue
✗ 发消息(Slack / 邮件 / GitHub)
✗ 上传到第三方工具(diagram renderer / pastebin / gist)
✗ 修改共享基础设施或权限
.claude/hooks.json { "PreToolUse": [ { "matcher": {"type": "Bash"}, "if": "command =~ '^git push'", "command": "./scripts/check-branch-policy.sh" }, { "matcher": {"type": "mcp_tool", "name": "slack.send_message"}, "if": "channel =~ '^#prod-'", "command": "./scripts/require-double-confirm.sh" } ] }
"用户自主权" 不等于"什么都让 AI 决定"—— 它是"用户能定义规则"。Auto Mode 是用户决定的; condition hook 是用户定义的;deny 规则是用户配置的。 AI 只是执行者。
4 月安全更新的累积效果:Claude Code 比 3 月明显更聪明,但同时更难误用。 这是 Anthropic 一贯立场——能力提升不允许"先发布、再修补"。
| 更新 | 对应原则 | 体现 |
|---|---|---|
| find -exec / -delete 单独授权 | Harmless | 能力越大,授权颗粒越细——不让"通配规则"成为 attack surface。 |
| wrapper 命令检测 | Harmless | 不让 sudo / env 等成为绕过路径——deny 规则覆盖完整命令树。 |
| Read-only 命令免提示 | 理解意图 + Helpful | 区分"看"和"改"——只对真正可能破坏的动作设防。 |
| OAuth 全链修复 | Honest | 承认 OAuth 复杂——把脆弱处一个个修扎实,而不是用变通绕开。 |
| deniedDomains | 用户自主 | 策略可表达——"不能访问内网" 用一行 setting 实现。 |
| PID namespace 隔离 | Harmless | 子进程不能"看见"或"误伤"宿主——即使被 prompt injection 也限制最大伤害。 |
| Auto Mode 仍需确认 | 用户自主 | 不可逆动作不让渡——哪怕用户开了 auto,也保留 stop point。 |
| 条件 Hook | 用户自主 | 策略表达力到位——团队/合规要求都能精确编码进规则。 |
下一页:把权限设计从单机延伸到组织——RBAC + SCIM + 企业治理。