系统:运行中
← 返回所有攻击
AGENTS MEDIUM NEW

Claude Code 的 /copy 命令把响应留在了所有人可读的临时文件里

2026 年 6 月的一则公告显示,Claude Code 的 /copy 命令将会话输出写入一个可预测、所有人可读的 /tmp 路径——这是一个经典的不安全临时文件缺陷,还叠加了一个符号链接覆写问题。已在 2.1.128 中修复。

2026-07-20 // 5 min affects: claude-code

这是什么?

2026 年 6 月 25 日,一则安全公告(GHSA-4vp2-6q8c-pvq2)描述了 Anthropic 命令行编程代理 Claude Code 中的一个本地安全缺陷。/copy 命令——用于把助手的最新响应复制到剪贴板——会先把该响应写入磁盘上的一个固定路径:/tmp/claude/response.md。该文件以所有人可读(0644)的方式创建,位于一个所有人可进入的目录(0755)中,没有按用户隔离,没有随机文件名,也没有针对符号链接的保护。

其后果是一个经典的多用户主机问题,被搬到了 AI 工具里。在共享主机上,任何其他本地用户都能读取该文件——而助手的响应里经常包含粘贴进会话的密钥、API 密钥、令牌或专有代码。该缺陷已在 2.1.128 版本中修复(2026 年 6 月底发布),影响从 2.1.59 到该补丁之间的所有版本。它由一位外部研究者通过 Anthropic 的协同披露计划报告。

工作原理

这里没有任何新颖的漏洞利用,而这恰恰是要点所在。缺陷在于该功能忽略了两条已有数十年历史的文件处理规则。

行为                          /copy 做了什么             为什么不安全
----------------------------  -------------------------  -----------------------------
路径选择                      硬编码 /tmp/claude/        可预测——任何本地用户都知道
                              response.md                去哪里读取 / 放置
文件权限                      0644(所有人可读)         其他用户可读取内容
目录权限                      0755(可进入)             其他用户可进入并列目录
符号链接处理                  无                         会跟随攻击者的符号链接
按 UID 隔离                   无                         所有人共用同一路径

由此产生两种不同的风险。第一种是信息泄露:由于文件所有人可读,一个无特权的本地用户可以直接读取运行了 /copy 的特权用户的最新响应。第二种是符号链接写入:由于路径静态且可预测,本地用户可以预先创建该目录,并在预期的文件名处放置一个指向磁盘上其他文件的符号链接。当特权进程随后写入响应时,会跟随该链接,用响应文本覆写攻击者选定的目标。两者都需要同一台机器上存在第二个无特权用户,以及一个真正调用该命令的特权用户——因此这是一个本地、多租户问题,而非远程问题。相关弱点类别是熟悉的 CWE-377(不安全的临时文件)、CWE-59(链接跟随)和 CWE-200(信息暴露)。

为什么重要

AI 编程助手的普及速度快于其安全记录的积累速度,人们很容易只关注那些奇异的失效模式——提示注入、工具投毒、沙箱逃逸。这个缺陷是一记有益的提醒:AI 出现之前的安全基本功依然适用,而一个运行在开发者笔记本、持续集成 runner、堡垒主机和共享构建服务器上的 CLI,会继承普通 Unix 工具花了三十年才学会规避的每一个经典本地提权陷阱。

影响范围取决于工具在哪里运行。在单用户笔记本上,实际风险较低。但在共享构建服务器、多用户跳板机,或多个服务身份共存的容器镜像中,一个以明文保存助手响应的所有人可读文件,就是一起随时会发生的凭据泄露——而符号链接变体又把读取问题变成了受限的写入原语。它还与本周期更广泛的 Claude Code 本地暴露发现相互叠加,包括此前一个 Read 工具在 CI 中触及 runner 环境的问题。代理写入的临时文件属于攻击面的一部分,正如审批流程中的符号链接处理一直以来那样。

防御措施

首要的修复是升级;其余则是可推广到你所运行的任何 AI CLI 的卫生习惯。

  1. 将 Claude Code 升级到 2.1.128 或更高版本。 自动更新的用户已经收到;用 claude --version 确认,并在受管安装中固定一个最低版本。
  2. 把共享主机视为对 AI 工具充满敌意。 优先使用按用户分配的机器或按 UID 划分的沙箱。在多用户系统上,除非你能控制 umask 和目录,否则避免运行会把响应落盘的助手命令。
  3. 在操作系统层加固临时文件处理。 启用 fs.protected_symlinks=1(现代 Linux 默认开启),使进程无法跟随进入其不拥有的目录的符号链接;通过 XDG_RUNTIME_DIR 或私有 TMPDIR 使用按用户的临时目录,而不是共享的 /tmp 子树。
  4. 对于工具开发者:以安全方式创建临时文件。 使用 mkstemp 类 API(随机文件名、O_EXCL0600 模式),写入按 UID 的目录,绝不使用固定的共享路径。优先在内存中传输到剪贴板,而不是先落盘。
  5. 扫描你的依赖树。 该缺陷在漏洞数据库中针对 @anthropic-ai/claude-code npm 包进行跟踪;依赖扫描和 SCA 工具现在会标记受影响的版本,因此应把 AI CLI 包纳入与其他一切相同的流水线。
  6. 轮换任何可能经过该文件的凭据。 如果在安装了脆弱版本的共享机器上运行过 /copy,请将出现在那些响应中的密钥视为可能已暴露并予以轮换。

状态

项目参考日期备注
安全公告GHSA-4vp2-6q8c-pvq22026-06-25/copy 中的不安全临时文件 + 符号链接写入
CVE 记录CVE-2026-46406(NVD)2026-06CVSS 3.1 6.1(中);CWE-377、CWE-59、CWE-200
受影响版本GitLab Advisory DB2.1.59 起,至 2.1.128(不含)
修复版本Claude Code 2.1.1282026-06-29自动更新已部署;手动更新者需升级

这里的教训并不是 AI 编程工具格外不安全——而是它们是运行在真实机器上的软件,当工具学会写代码时,软件安全里那些枯燥的部分并没有停止适用。可预测的临时路径、所有人可读的权限、无保护的符号链接,正是一个成熟的 CLI 无论底层用了什么语言模型都绝不应该发布的缺陷。

Sources