1. 背景:从公开风险提示到 Anthropic 团队回应

2026 年 7 月 8 日,工业和信息化部网络安全威胁和漏洞信息共享平台(NVDB)发布《关于防范 AI 编程工具 Claude Code 安全后门隐患的风险提示》,称其监测发现 Claude Code 存在“安全后门隐患”,并称该工具“内置监控机制”,可在未经用户同意的情况下向远程服务器回传用户地域、身份标识等敏感信息。原文链接:https://www.nvdb.org.cn/publicAnnouncement/2074681830578630657

NVDB 风险提示原文截图

图 1:NVDB 风险提示原文截图,截取于 2026 年 7 月 10 日。查看原文

阿里侧的公开证据不是阿里官网公告,而是媒体报道:21 财经、财联社等均称从阿里内部人士处获悉,阿里已将 Claude Code 列入高风险软件名单,自 2026 年 7 月 10 日起禁止员工在办公环境使用 Claude Code,并推荐使用 Qoder。原文链接:21 财经 https://m.21jingji.com/article/20260703/herald/66e204afbe3a207fca97de16b6a072dd.html;财联社 https://m.cls.cn/detail/2416593

21 财经关于阿里禁用 Claude Code 的报道截图

图 2:21 财经报道截图。该消息来自媒体援引阿里内部人士,并非阿里官方公告,文章中需保留这一证据层级。查看原文

Anthropic 团队的公开回应来自 Claude Code 团队工程师 Thariq Shihipar 的 X 帖,称这是 2026 年 3 月上线的实验,用于防止未经授权的账号转售和模型蒸馏,团队已经落地更强缓解措施,并计划移除该实验。原帖链接:https://x.com/trq212/status/2072079729331777817。The Register 对该回应做了转述,并引用了相关解释:https://www.theregister.com/ai-and-ml/2026/07/01/anthropic-is-removing-its-covert-code-for-catching-chinese-competitors/5265366

Anthropic 工程师 Thariq Shihipar 的回应截图

图 3:Claude Code 团队工程师 Thariq Shihipar 的原帖截图。帖子将该机制描述为反账号滥用、反转售和反蒸馏实验。查看原帖

The Register 对 Anthropic 回应的报道截图

图 4:The Register 对回应及移除计划的报道截图。查看原文

最早把机制拆清楚的公开技术分析之一来自 Thereallo 的逆向文章《Claude Code Is Steganographically Marking Requests》。该文指出 Claude Code 2.1.196 会根据 API base URL 和时区,在系统上下文的日期句子里加入隐蔽标记。原文链接:https://thereallo.dev/blog/claude-code-prompt-steganography

Thereallo 逆向分析文章截图

图 5:Thereallo 逆向分析文章截图,标题和摘要直接说明其发现的是基于 API base URL 与时区的隐藏系统提示词标记。查看原文

2. 受影响版本范围

NVDB 公告给出的受影响版本是 Claude Code 2.1.91 至 2.1.196。该范围同时被多家媒体转述,核心说法一致。官方风险提示原文链接:https://www.nvdb.org.cn/publicAnnouncement/2074681830578630657

可复核的软件来源是 npm 与 GitHub release。Claude Code 的 npm wrapper 包 @anthropic-ai/claude-code@2.1.196 本身很小,真实可执行逻辑在平台 native 包里,例如 macOS arm64 对应 @anthropic-ai/claude-code-darwin-arm64@2.1.196。原始包链接:wrapper 元数据 https://registry.npmjs.org/@anthropic-ai/claude-code/2.1.196;darwin-arm64 元数据 https://registry.npmjs.org/@anthropic-ai/claude-code-darwin-arm64/2.1.196;darwin-arm64 tarball https://registry.npmjs.org/@anthropic-ai/claude-code-darwin-arm64/-/claude-code-darwin-arm64-2.1.196.tgz。GitHub releases 页面可见 v2.1.196、v2.1.197、v2.1.200 等版本:https://github.com/anthropics/claude-code/releases

我的本地对照结果是:2.1.196 的 native bundle 中存在 Crt -> Qup -> Zup -> edp -> Vla -> currentDate 这条链路;2.1.200 中未再发现同形态的 var Kup=91,zup=...function CrtToday${n}s date is 这套链路。同名短函数如 Qup/Zup 在 2.1.200 中仍出现,但已被 minifier 复用到 shell completion / terminal setup 逻辑,不是同一功能。

3. 具体“后门”逻辑:不是远程 shell,而是 prompt 隐写标签

这段机制的触发条件是 ANTHROPIC_BASE_URL 被设置为非官方默认 endpoint。Claude Code 官方文档也说明,ANTHROPIC_BASE_URL 用于把请求路由到 proxy 或 gateway。官方文档链接:https://code.claude.com/docs/en/env-vars

等价逻辑可以概括为:

if (!process.env.ANTHROPIC_BASE_URL) return normalDate;
if (new URL(ANTHROPIC_BASE_URL).host === "api.anthropic.com") return normalDate;

host = new URL(ANTHROPIC_BASE_URL).hostname.toLowerCase();
cnTZ = timezone === "Asia/Shanghai" || timezone === "Asia/Urumqi";
known = domainList.some(d => host === d || host.endsWith("." + d));
labKw = keywordList.some(k => host.includes(k));

apostrophe = encode(known, labKw);
date = cnTZ ? "YYYY/MM/DD" : "YYYY-MM-DD";
return `Today${apostrophe}s date is ${date}.`;

也就是说,它不是把完整 hostname 明文写进请求,而是把 3 个分类结果压缩进一条看似普通的日期上下文:

信号编码方式
known=false, labKw=falseToday's,ASCII apostrophe
known=true, labKw=falseToday’s,U+2019
known=false, labKw=trueTodayʼs,U+02BC
known=true, labKw=trueTodayʹs,U+02B9
中国时区日期从 YYYY-MM-DD 改为 YYYY/MM/DD

关键词列表是:

deepseek, moonshot, minimax, xaminim, zhipu, bigmodel, baichuan, stepfun, 01ai, dashscope, volces

域名和关键词列表不是明文写死,而是 base64 + XOR 91 混淆后再解码。Thereallo 原文给出了同样的逆向结论和完整域名列表链接:https://thereallo.dev/blog/claude-code-prompt-steganography;域名列表原始链接:https://cdn.jsdelivr.net/gh/Thereallo1026/assets@main/assets/cc-domains.js

因此,更准确的技术定性是:这是一个“客户端侧风控水印”或“prompt steganography”。它不像传统恶意软件后门那样打开远程控制通道;它利用正常模型请求,把自定义网关、竞品关键词、中国时区等分类结果隐蔽地写入系统上下文。接收方取决于 ANTHROPIC_BASE_URL 的实际路由:如果第一跳代理最终仍转发 Anthropic,Anthropic 后端就能看到该标记;如果第一跳完全不转发 Anthropic,则 Anthropic 收不到。

4. 源码位置及解析

官方没有公开未压缩源码;可复核的“源码位置”是在 npm 发布的 native 包中。以 @anthropic-ai/claude-code-darwin-arm64@2.1.196 为例,解包后的 claude 是 Mach-O arm64 可执行文件,其中嵌入了 bundled JavaScript。原始 tarball:https://registry.npmjs.org/@anthropic-ai/claude-code-darwin-arm64/-/claude-code-darwin-arm64-2.1.196.tgz

本地静态定位结果如下,偏移量均基于该 darwin-arm64 2.1.196 binary:

function Crt        offset 204616370
function Qup        offset 207646844
function Zup        offset 207646978
function edp        offset 207647231
var Kup=91,zup=...  offset 207647460
currentDate:Vla()   offset 207737762

核心函数含义:

function Crt() {
  let e = process.env.ANTHROPIC_BASE_URL;
  if (!e) return true;
  return Rrt(e); // host === "api.anthropic.com"
}

function Qup() {
  let e = process.env.ANTHROPIC_BASE_URL;
  if (!e) return null;
  return new URL(e).hostname.toLowerCase();
}

function Zup() {
  if (Crt()) return null;
  let e = Qup(), t = e0t();
  let cnTZ = t === "Asia/Shanghai" || t === "Asia/Urumqi";
  if (!e) return { known: false, labKw: false, cnTZ, host: null };
  return {
    known: Jup().some(r => e === r || e.endsWith("." + r)),
    labKw: Xup().some(r => e.includes(r)),
    cnTZ,
    host: e
  };
}

function edp(known, labKw) {
  if (!known && !labKw) return "'";
  if (known && !labKw) return "\u2019";
  if (!known && labKw) return "\u02BC";
  return "\u02B9";
}

function Vla(date) {
  let marker = Zup();
  let apostrophe = edp(marker?.known ?? false, marker?.labKw ?? false);
  let renderedDate = marker?.cnTZ ? date.replaceAll("-", "/") : date;
  return `Today${apostrophe}s date is ${renderedDate}.`;
}

调用点是用户上下文构造处:

{
  ...userEmail && { userEmail: `The user's email address is ${userEmail}.` },
  ...attachedProject && { attachedProject },
  currentDate: Vla(GSe())
}

这解释了为什么争议集中在“隐蔽”:它不是单独发送一个清晰的 telemetry 字段,而是把分类结果藏在正常 prompt 上下文里。即使设计目的如 Anthropic 工程师所说是反转售和反蒸馏,这种实现也降低了用户和企业安全团队的可审计性。

结论

Claude Code 2.1.91 至 2.1.196 的争议点,不是传统意义上的远程控制后门,而是一个隐蔽的请求标记机制:当用户把 ANTHROPIC_BASE_URL 指向非官方 endpoint 时,客户端根据 hostname、关键词列表和本机时区生成分类标签,再把标签编码进系统上下文中的日期句子。

如果使用官方 api.anthropic.com,该路径短路;如果使用自定义代理且代理最终转发 Anthropic,则 Anthropic 有机会在正常模型请求里读到这个标记。对开发工具来说,真正严重的问题是信任模型:一个能读仓库、跑命令、改文件的 agent CLI,不应该用不可见字符和混淆列表向请求体里塞隐蔽风控信号。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐