TL;DR:本文讨论的是终端工具 Claude Code(npm 包 @anthropic-ai/claude-code),不是 Claude 网页聊天。据逆向报告,当环境变量 ANTHROPIC_BASE_URL 被设为非 api.anthropic.com 的代理/网关时,客户端会在发往 Anthropic 的系统提示词里,对 Today's date is … 一行做肉眼不可见的 Unicode 与日期格式微调,据爆料用于反蒸馏与识别非官方路由;该逻辑在 2.1.197(2026-07-01)已移除,但官方 changelog 未提及。面向用 Claude Code、Cursor、Copilot 等桌面/终端 Agent 的开发者与 Tech Lead,本文区分 2026 年两场独立争议(4 月 Desktop Native Messaging vs 6 月隐写术)、给出原理对照表、六步防护 Runbook、厂商信任原则与 FAQ;若你已在评估 2026 AI 编程助手选型,可把本文当作「终端 Agent 信任边界」的补充阅读。
002026 年 Anthropic 信任危机:两场事件,别混为一谈
2026 年上半年,Anthropic 在桌面客户端与终端编码 Agent两条产品线上接连引发隐私与安全争议。社区常把二者统称为「Claude 间谍软件」,但触发机制、影响面与修复路径完全不同。下表是决策前先做的「事件 A / 事件 B」区分——写 Runbook 与对内通报时务必分开处理。
| 维度 | 事件 A:Claude Desktop Native Messaging(2026 年 4 月) | 事件 B:Claude Code 系统提示词隐写术(2026 年 6 月 30 日曝光) |
|---|---|---|
| 产品 | Claude Desktop macOS 客户端(Claude.app) | Claude Code CLI(@anthropic-ai/claude-code) |
| 首次披露 | 隐私顾问 Alexander Hanff(2026 年 4 月);安天实验室(Antiy Labs) 发布风险分析报告 | 开发者 Thereallo(thereallo.dev);Reddit 用户 LegitMichel777;Hacker News 热议 |
| 行为摘要 | 安装时静默写入 Chromium 系浏览器的 Native Messaging manifest,预授权 Claude 浏览器扩展与本地二进制通信,即使用户未安装对应浏览器 | 当 ANTHROPIC_BASE_URL 非默认时,在系统提示词 Today's date is … 行嵌入 Unicode 单引号变体与时区相关日期分隔符 |
| 触发条件 | 安装/启动 Claude Desktop | 仅当 API 路由经自定义 base URL(代理、网关、转售 API 等) |
| 第三方确认 | 顾问公司 Digital 520 创始人 Noah Kenney 独立复核 Hanff 发现 | 媒体 The Register、TechTimes 等跟进;Anthropic 员工 Thariq Shihipar 在 X 回应 |
| 社区热度 | 隐私与 ePrivacy 讨论;Malwarebytes、gHacks 报道 | Hacker News 350+ 点、100+ 评论,形成「反蒸馏合理 vs 隐蔽手段越界」两派 |
| 修复状态 | 据报后续版本增加授权开关,底层攻击面讨论仍在 | 2.1.197(2026-07-01)合并移除 PR;changelog 未写此项 |
与 Gemini CLI 开源信任危机、Anthropic AI for Science 战略 对照阅读时,可把事件 B 理解为:厂商在反模型蒸馏与开发者工具透明度之间的取舍——据 Anthropic 对外说法,相关实验旨在阻止未授权转售与蒸馏,但隐写式标记与未在 changelog 披露的移除,放大了信任损耗。
痛点为什么「一个单引号」会让开发者不安?
Claude Code 是跑在你本机或 CI 上的高权限终端 Agent:读仓库、调工具、经 MCP 连外部系统。开发者合理预期是:发往模型的 system prompt 与你在 UI 里看到的一致,且环境变量只影响路由,不应悄悄改写提示词内容。据逆向报告,事件 B 打破了这条预期:
- 隐蔽通道:指纹不写在独立 telemetry 字段,而是藏在每轮请求都会出现的日期行里,肉眼与 diff 工具几乎无法察觉。
- 条件触发:直连
api.anthropic.com的用户据报不会走该分支;走 SiliconFlow、DeepSeek 网关、企业反向代理等自定义ANTHROPIC_BASE_URL的路径才会激活——与国内「API 中转」生态高度重叠。 - 列表混淆:域名清单经 base64 + XOR(91) 混淆,据逆向约 147 条规则,含
deepseek、moonshot、zhipu等关键词及多家网关域名。 - 版本漂移:逻辑据报自 2.1.91(2026 年 4 月初)存在;社区在 2.1.193 / 2.1.195 / 2.1.196 仍可复现,直至 2.1.197 才下线。
- 披露缺口:移除提交已合并,但发布说明未提及隐写代码,企业合规与 SBOM 审计难以凭 changelog 闭环。
HN 讨论中一派认为:保护模型免受蒸馏是正当商业需求;另一派认为:对付费开发者工具使用 steganography、且不告知用户,与「Ask for trust」的产品叙事冲突。两派争议本身说明:终端 Agent 的信任模型尚未标准化。
01隐写术原理:Today's date 一行如何编码指纹
据 thereallo.dev 与 Vincent Schmalbach 等逆向文章,流水线可概括为四步:(1)读取 process.env.ANTHROPIC_BASE_URL;(2)若为空或指向官方 API,返回普通日期行;(3)否则解析 hostname,对照 XOR 解码后的域名/关键词表;(4)按匹配结果选择 Unicode 单引号,并按系统时区决定是否把日期中的 - 换成 /。
| 条件(据逆向报告) | Today's 中单引号 | Unicode | 日期格式示例 |
|---|---|---|---|
| 非默认 base URL,host 不在名单且无 lab 关键词 | ASCII 直撇号 | U+0027 ' | 2026-06-30(非中国时区) |
| host 命中已知网关/转售域名列表 | 右单引号 | U+2019 ' | 同上 |
| host 未命中名单但含 AI lab 关键词 | 修饰字母撇号 | U+02BC ʼ | 同上 |
| 同时命中域名名单与关键词 | 修饰字母 prime | U+02B9 ʹ | 同上 |
系统时区为 Asia/Shanghai 或 Asia/Urumqi | (与上表组合) | — | 2026/06/30(- 换 /) |
域名与关键词表在二进制内以 base64 编码后再 XOR(91) 存储,据逆向合计约 147 条规则,涵盖 deepseek、moonshot、zhipu、siliconflow 等字符串及多家中转域名。Anthropic 服务端若在入库前规范化或保留原始 Unicode,即可从同一行英文里读出「是否走代理、是否像中国 AI 生态路由、是否中国时区」等信号——据爆料用于反蒸馏与未授权转售识别,并非社区已证实的「主动间谍行为」定论。
function renderDateLine(date) {
if (!customBaseUrl()) return `Today's date is ${date}.`;
const { knownHost, labKeyword, cnTZ } = classifyRoute();
const apostrophe = pickApostrophe(knownHost, labKeyword);
const rendered = cnTZ ? date.replaceAll("-", "/") : date;
return `Today${apostrophe}s date is ${rendered}.`;
}
- 可引用数据 1:隐写逻辑据报在 Claude Code 2.1.91 起存在,曝光时 2.1.196 仍可检出。
- 可引用数据 2:混淆域名/关键词规则表据逆向约 147 条,经 XOR(91) 与 base64 隐藏。
- 可引用数据 3:Hacker News 相关帖 350+ 点、100+ 评论,社区明显分裂为「反蒸馏合理」与「开发者工具不应搞隐蔽标记」两 camp。
02版本时间线与动机:据爆料 vs 官方回应
| 版本 / 时间 | 据公开信息与逆向报告 |
|---|---|
| 2.1.91(2026-04-02 前后) | Reddit 用户 LegitMichel777 称在此版本发现相关逻辑 |
| 2.1.193 / 2.1.195 / 2.1.196 | 社区在 npm 包与 embedded chunk 中仍可复现隐写分支 |
| 2026-06-30 | Thereallo 发布逆向长文;HN/Reddit 发酵 |
| 2.1.197(2026-07-01) | 合并移除 PR;官方 changelog 未提及隐写代码删除 |
Anthropic 员工 Thariq Shihipar 在 X 上表示,据其说法这是 3 月启动的实验,旨在防止未授权转售与保护模型免受蒸馏,且团队已计划在下个版本回滚。The Register 等媒体报道 Anthropic 承认代码存在并承诺修复。以上均为对外表态;是否在服务端实际消费这些标记、是否影响账号风控,Anthropic 未公开细节,本文不对未披露后果作事实断言。
同一时期源码泄露还曝光 ANTI_DISTILLATION_CC 等其它反蒸馏机制(如向请求注入干扰性 tool 数据)。据爆料,隐写术与这些措施同属「保护模型」工具箱,但隐蔽修改 system prompt 对开发者信任的伤害,远高于文档化的 API 字段。
03是不是「间谍软件」?两场事件分别怎么定性
事件 A:未经授权的本地通道预置
Hanff 与 Antiy Labs 的核心指控是:Claude Desktop 在未告知用户的情况下,向 Chrome、Edge、Brave、Arc、Vivaldi、Opera 等路径写入 com.anthropic.claude_browser_extension.json,预授权扩展 ID 与本地 helper 通信;删除后重启应用会自动再生。Noah Kenney 独立确认:这形成了「浏览器扩展 → 沙箱外二进制」的持久预授权桥接。
风险链条在于:Anthropic 自家文档称 Claude for Chrome 存在 prompt injection 风险,无缓解时攻击成功率 23.6%,有缓解仍约 11.2%。若扩展已安装且 manifest 预置,据安全分析恶意页面上的注入理论上可经扩展与 Native Messaging 触及用户权限级本地能力——这是未经授权篡改本地配置 + 已知高成功率注入面的组合,而非传统意义木马,但合规与 ePrivacy 争议显著。
事件 B:未披露的提示词层遥测
事件 B 不修改本地文件,而是在用户不可见的 system prompt 中嵌入分类信号,且无单独 opt-in 说明。据逆向报告,这属于未披露的遥测/分类通道:对用户透明度和数据最小化原则不友好。是否构成「间谍软件」取决于司法辖区与合同条款;工程上更准确的表述是:开发者工具中存在隐蔽的分类标记,且移除时未在 changelog 说明。
表述纪律:全文对 Anthropic 动机使用「据爆料」「据逆向报告」「据其对外说法」;不对未公开的服务端用途、账号处罚作定论。企业内审应同时覆盖事件 A 的 manifest 路径与事件 B 的 base URL / 版本号。
04六步防护 Runbook(Claude Code + Desktop)
-
01
检查
ANTHROPIC_BASE_URL:在 shell、~/.claude/settings.json、CI 密钥库中列出所有 Claude Code 实例。若指向非官方 API,据逆向报告曾触发隐写分支;企业网关应文档化并获安全批准。 -
02
升级 Claude Code ≥ 2.1.197:运行
claude --version或npm ls -g @anthropic-ai/claude-code。低于 2.1.197 的版本据报仍含隐写逻辑;升级后应用 changelog 未写此项,需自行验证二进制或锁定版本。 -
03
审计 Claude Desktop Native Messaging:在 macOS 检查
~/Library/Application Support/Google/Chrome/NativeMessagingHosts/及 Edge、Brave、Arc 等等价路径是否存在com.anthropic.claude_browser_extension.json。不需要浏览器自动化则删除 manifest 并记录是否被 Desktop 重建。 -
04
核对系统时区:事件 B 据报在
Asia/Shanghai、Asia/Urumqi下切换日期分隔符。CI 与云端 dev box 应使用预期时区,避免误标记;必要时在文档中固定TZ=UTC。 -
05
企业最小权限:限制谁可安装 Desktop、谁可配置 base URL 与 API Key;对 MCP 与浏览器扩展启用审批;将 Claude Code 与生产密钥隔离。
-
06
隔离开发环境并审计:在独立 Mac 或云端裸金属节点上跑 Agent,与日常浏览、个人 Apple ID 分离;定期 grep 出站 system prompt 样本(若走 MITM 实验环境)或依赖厂商 SBOM。需要稳定、可重置的 Mac CI/Agent 主机时,可参考 NUKCLOUD 定价 与 下单页 开通独占节点。
05AI 厂商信任:四条可落地的采购原则
终端 Agent 会读代码、调工具、持有 API Key。2026 年的 Claude Code 隐写术与 Desktop manifest 争议说明:厂商文档 ≠ 运行时行为。采购与平台团队可采纳以下四条原则(适用于 Anthropic、Google、OpenAI、Cursor 等):
- 行为可观测:要求对 system prompt 注入、环境变量触发逻辑、本地文件写入有公开说明或 SBOM;changelog 须覆盖安全相关移除。
- 数据最小化:分类与反滥用尽量用显式 API 字段或 opt-in telemetry,避免 steganography 式隐蔽通道。
- 本地变更需 consent:Native Messaging、浏览器扩展、LaunchAgent 等预置即违规,除非首次使用时逐项授权。
- 供应链可验证:锁定版本、校验 npm 包 hash、在隔离环境做 diff;Agent 主机与生产网络分区,便于一键重建。
桌面 Agent 与 Claude Code 一类工具的信任风险,往往不在模型回答质量,而在你未审阅的本地副作用与不可见的出站 payload。在共享笔记本或超卖 VPS 上跑 7×24 Agent,还叠加邻居干扰与长连接中断;对需要可审计、可 SSH、可装 Xcode 与 Claude Code 的生产或 CI 平面,NUKCLOUD 多区域裸金属 Mac / 云端 Mac 节点提供独占物理机、Root 权限与按天/月弹性计费——Agent 环境与企业日常机分离,泄露面更小。可先访问 定价页 对照规格,再在 下单页 试跑隔离 dev 环境。
06常见问题
NativeMessagingHosts 目录删除 com.anthropic.claude_browser_extension.json,并确认 Claude Desktop 重启后是否再生。据 Hanff 报告,删除后可能被应用重建;长期方案是禁用 Desktop 的浏览器集成功能或使用不包含该行为的版本,并监控目录变更。- → / 仅在 ANTHROPIC_BASE_URL 已指向非官方端点且时区为 Asia/Shanghai 或 Asia/Urumqi 时叠加。直连官方 API 时,据报不进入该代码路径。Today's 一词中,把 ASCII 撇号 U+0027 换成视觉上几乎相同的 U+2019、U+02BC、U+02B9,编码「域名名单命中 / AI lab 关键词命中」等组合。人类阅读无差异,Unicode 感知的日志或服务端可解码。ANTHROPIC_BASE_URL,升级后仍应复查环境变量与 CI 镜像;changelog 未提及此项,合规团队宜保留升级记录与版本锁定策略。ANTHROPIC_BASE_URL 非官方且 host 匹配规则表或关键词,就可能改写日期行;2.1.197 前存在该行为。升级后逻辑已移除,但是否仍有其它反蒸馏机制(如 ANTI_DISTILLATION_CC)需持续跟踪厂商更新与社区逆向。07参考来源
- The Register — Anthropic 移除 Claude Code 隐蔽代码的报道
- thereallo.dev — 系统提示词隐写术逆向长文
- 安天实验室 Antiy Labs — Claude Desktop Native Messaging 风险分析
- Alexander Hanff — Claude Desktop 静默安装 manifest 的原始披露(That Privacy Guy 等转载)
- Hacker News — 2026 年 6 月底相关讨论(350+ 点、100+ 评论量级)
- Reddit — LegitMichel777 等对 2.1.91 行为的讨论
- Vincent Schmalbach、TechTimes 等对
ANTHROPIC_BASE_URL与 Unicode 标记的技术跟进
终端 Agent 正在变成「带 Root 的实习生」。Claude Code 隐写术事件提醒我们:在选型 Cursor vs Claude Code vs Copilot 时,除 SWE-bench 与定价外,还要问一句——它会不会悄悄改你发给模型的 prompt? 把 Agent 关在可重建的隔离 Mac 上,是 2026 年务实的一票。