☰
Dive into Claude Code 安全研究:2 个 CVE 暴露的“信任前窗口“攻击与防御启示
2026/10/8 9:03:36 网站建设 项目流程

Dive into Claude Code 安全研究:2 个 CVE 暴露的"信任前窗口"攻击与防御启示

【免费下载链接】Dive-into-Claude-CodeA Systematic Analysis and Discussion of Claude Code for Designing Today's and Future AI Agent Systems项目地址: https://gitcode.com/gh_mirrors/di/Dive-into-Claude-Code

如果你正在使用或构建 AI 编码智能体,Dive into Claude Code这份源码级架构分析值得一读。本项目对 Claude Code v2.1.88(约 1,900 个 TypeScript 文件、512K 行代码)做了系统性剖析,其中最值得警惕的发现是:2 个已修复的 CVE 暴露了"信任前窗口"(Pre-Trust Window)——钩子和 MCP 服务器会在信任对话框弹出之前就已执行,形成一个绕开整套权限管道、天然享有特权的攻击窗口。本文将从新手视角讲清这个漏洞的原理与防御启示。

先认识这个项目:Dive into Claude Code 是什么?

Dive into Claude Code 是一个面向智能体系统设计的开源研究项目,核心价值是一句话:Claude Code 代码库里只有 1.6% 是 AI 决策逻辑,其余 98.4% 都是确定性基础设施——权限门控、上下文管理、工具路由和恢复逻辑。智能体循环本身只是一个简单的 while 循环,真正的工程复杂度在它周围的系统上。

项目包含三部分资料,均在本仓库中可直接阅读:

  • 📄 完整论文:Dive_into_Claude_Code.pdf
  • 📖 中文架构深度剖析:architecture_zh.md
  • 🔍 设计空间与来源核查笔记:agent-design-space-source-notes_zh.md

整体架构上,系统由用户 → 接口 → 智能体循环 → 权限系统 → 工具 → 状态与持久化 → 执行环境组成,权限系统悬在所有工具动作之上,是安全研究的主战场:

什么是"信任前窗口"?一个时间差造成的致命漏洞

要理解这个攻击面,先看 Claude Code 的默认安全姿态:拒绝优先(deny-first)。规则评估中,宽范围的拒绝规则永远压过窄范围的允许规则;每个工具调用都要经过预过滤 → PreToolUse 钩子 → 规则评估 → 权限处理程序这条管道。

但 2 个 CVE 指向了同一个根因(见 README_zh.md):

钩子(Hooks)和 MCP 服务器在初始化阶段、信任对话框弹出之前就已执行——此时整套"拒绝优先"管道还没有上线,扩展代码却在结构上已经拥有特权。

打个比方:大楼的门禁系统(权限管道)要到访客登记(信任对话框)后才启动,但快递员(钩子/MCP 服务器)却在门禁通电前就进入了大厅。这个"时间差"就是信任前窗口——它不在管道之外被绕过,而是在管道存在之前就已经执行了。

图中左侧伪代码展示了扩展机制的三个注入点:assemble()决定模型看到什么、model()决定模型能调用哪些工具、execute()决定动作是否执行。问题在于:初始化的钩子与 MCP 服务器接入发生在execute()权限门控生效之前,这正是两个 CVE 共用的攻击路径。

为什么这 7 层安全防线挡不住"第一毫秒"?

架构文档 把 Claude Code 的保护机制归为 7 个安全层:

  1. 工具预过滤——被全局拒绝的工具从模型视野中彻底剔除
  2. 拒绝优先规则评估——拒绝始终覆盖允许
  3. 权限模式约束——7 种模式构成渐进式信任光谱(plan→bypassPermissions)
  4. Auto 模式 ML 分类器——独立 LLM 调用评估安全性
  5. Shell 沙箱——文件系统 + 网络隔离
  6. 会话级权限状态——绕过标志不随会话恢复
  7. 基于钩子的拦截——PreToolUse 钩子可阻止操作

这 7 层设计得再严密,都有一个共同前提:管道已经上线。而信任前窗口发生在管道上线之前——多层防御在这里同时失效,因为攻击根本不需要"穿过"任何一层。这就是安全研究中的经典教训:防御的深度(depth)救不了时间的缺口(timing gap)。

防御启示:给所有 Agent 构建者的 3 条经验

这两个 CVE 虽已修复,但其暴露的设计问题对每一个构建智能体系统的人都是通用警示:

🔒 启示一:信任确认必须早于一切第三方代码执行。初始化时序是攻击面。任何"加载扩展 → 再询问用户是否信任"的顺序都应改为"询问 → 确认 → 加载"。把信任对话框从流程中后段移到最前端,是消除这类窗口最直接的工程手段。

🧱 启示二:临时特权状态不要跨会话残留。值得注意的细节是:在 v2.1.88 中,会话级 bypass 标志和应用白名单不会随会话恢复——临时状态与持久化权限配置被刻意分开管理。这说明厂商已在"权限生命周期"上做了修正:授权一旦过期应自动失效,而不是无限延续。

⚖️ 启示三:把"执行边界"当成独立的设计对象。权限检查放在工具调用层(tool-call layer)是不够的——研究文献已证明间接路径可以绕过这一层。沙箱、凭据遮蔽、出网白名单等边界应独立于审批弹窗存在,二者互为冗余而非替代。

延伸阅读:从这一个 CVE 看整个 Agent 安全版图

Dive into Claude Code 的价值不止于这两个 CVE。它把安全研究放进了更大的设计空间:审批疲劳(93% 的提示批准率)、自动模式分类器、提示注入、工具返回值即不可信输入……完整的安全事件与研究索引见 related-resources_zh.md,项目入口可从 README_zh.md 的目录导航开始。

一句话总结:智能体的安全不取决于模型有多聪明,而取决于 harness(外围执行框架)在时间、边界和生命周期上有没有漏洞——信任前窗口正是这个命题最锋利的一个注脚。

【免费下载链接】Dive-into-Claude-CodeA Systematic Analysis and Discussion of Claude Code for Designing Today's and Future AI Agent Systems项目地址: https://gitcode.com/gh_mirrors/di/Dive-into-Claude-Code

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询