泄露源码证明Anthropic自己都不相信大模型,国内却在裸奔,
一、核心事实:LLM 几乎不参与权限决策
-
系统分工边界清晰
-
工具选择、代码生成、记忆提取、上下文管理:完全基于 LLM 调用 -
权限判断(允许 / 拒绝 / 询问用户):几乎完全由确定性代码实现,无 LLM 参与 -
原文明确:When it actually matters, they didn’t trust the model until recently. -
权限系统技术构成(纯工程实现)
-
规则匹配(rule matching) -
通配符匹配(glob patterns) -
正则校验(regex validators) -
硬编码路径检查(hardcoded path checks)无模型推理、无概率输出、无模糊分类。
二、权限执行流水线:固定步骤、不可篡改
所有工具调用在执行前,强制经过hasPermissionsToUseToolInner,执行顺序固定:
-
检查工具级拒绝 / 询问规则(glob 匹配 + 配置层级) -
执行工具自身 checkPermissions()方法(每个工具独立代码,非 LLM) -
执行不可绕过安全检查(敏感路径、内容专属规则) -
若开启 bypassPermissions且前述无拦截,则允许 -
检查工具级允许规则 -
默认行为:询问用户
关键事实:
-
全程无模型参与,规则匹配即通过 / 拒绝,不匹配则人工确认 -
无灰度、无概率、无模型裁量空间
三、Bash 工具权限:6 阶段 + 23 个校验器 + 4 种命令视图
仅 Bash 工具的checkPermissions()就包含6 个固定阶段:
-
复合命令拆分 -
安全包装剥离 -
子命令规则匹配 - 23 个独立安全校验器
-
路径约束检查 -
sed/mode 校验
系统为每条命令预计算4 种固定视图,校验器直接选用,不重复解析:
-
原始未修改: bash -c "rm '$target'" -
去除双引号: bash -c rm '$target' -
完全无引号: bash -c rm $target -
保留引号字符: bash -c " ' '"
校验覆盖范围(事实清单):
-
命令替换模式 -
Zsh 危险内置指令 -
IFS 注入 -
花括号扩展 -
Unicode 空格绕过技巧 -
其他 Shell 逃逸与注入手法
四、不可绕过检查:硬编码、控制流保证
以下操作任何权限模式、任何 Flag 都无法绕过,必须询问用户:
-
写入 .git/、.claude/、.vscode/ -
修改 Shell 配置文件 -
需用户交互的工具 -
内容专属询问规则
关键事实:
-
这些检查在 bypass 步骤之前执行 -
由代码控制流强制保证,非策略配置 -
不存在可跳过的开关、参数或模式
五、唯一 LLM 入口:Auto 模式,仅做兜底
-
唯一入口权限系统中仅有一处使用 LLM:Auto 模式,由
TRANSCRIPT_CLASSIFIER功能开关控制。 -
执行优先级
-
确定性代码 Pipeline永远优先 -
代码能判定(允许 / 拒绝)→ 分类器从不被调用 -
仅当代码走到 “ask” 且开启 Auto 时,分类器才兜底 -
失败闭环规则(全部事实)
-
分类器 API 错误 → 直接拒绝 -
连续 3 次拒绝 → 回退人工询问 -
累计 20 次拒绝 → 回退人工并重置计数器 -
上下文超长超出窗口 → 直接人工询问 - 错误时永不默认允许
-
官方定位Anthropic 公开说明:Auto 模式降低风险,但不消除风险,以研究预览形式发布。
-
-
七、关键结论
-
-
Claude Code 权限系统不是 LLM 驱动,是传统 RBAC 类代码系统 -
权限判断100% 可复现、可审计、可拦截,无随机性 -
敏感操作不由模型决定,由硬编码与控制流锁死 -
Auto 模式是减负而非放权,失败必回退人工 -
安全底线:智能交给模型,权限握在代码
所以,国内大部分在一窝蜂的裸奔的状态下,我们能在他的源代码中得到什么启发,就显而易见了 !!!
-
觉得不错,加个关注,点个赞。
夜雨聆风