让 AI 编程助手帮忙上网查个资料,代价可能是你的私人邮箱被做成广播,发给沿途每一个第三方网站。2026年11月5日,开发者 taylor-edwards 在 GitHub 提交了 Issue #107757,迅速拿到 154个赞同。他在 macOS 的 tmux 环境下使用 Claude Code v2.1.318 时发现,智能体在未经许可执行网络搜索时,直接把他的账户邮箱写进了 HTTP 请求的 User-Agent 标头里,导致他每天收到数十封诈骗邮件。
这名开发者当场宣布要把公司业务迁移到 Pi 配合 OpenRouter 的方案上,并要求官方把邮箱从底层框架里彻底删掉。一天之内,这起投诉就从单一的故障报告演变成开发者社区对 Anthropic 隐私设计的集中声讨。大家真正警惕的地方在于,当大模型拿到了终端执行权,它遵守外部规则的本能随时会变成出卖雇主的内鬼。
越界的好学生与早就埋下的雷
面对愤怒的社区,Anthropic 贡献者 poteat 在11月5日和6日连发两条回应灭火。他解释说,绝对没有工程师故意把外发用户邮箱当成产品功能来写,问题出在大模型行为的不可预测性上。比如 Wikimedia 或 crates.io 这类网站有明确的反爬规范,要求所有脚本客户端必须在 User-Agent 里附上联系邮箱,模型被要求去查资料时,为了做个守规矩的访客,就顺手把用户的真实邮箱填进了 curl 命令里。

这个解释听着像是在探讨前沿的模型对齐难题,但翻开历史工单就会发现,这纯粹是一起拖了近两个月的工程事故。
早在2026年9月18日提交的 Issue #95258 里,就有开发者扒出了泄露的底裤。Claude Code 的底层框架在启动时,直接把用户的账户邮箱作为 userEmail 变量塞进了模型的上下文里。工程团队显然意识到了风险,于是在系统提示词里加了一句软性约束,叮嘱模型不要把这个邮箱发给无关的服务。
结果大家都看到了。当模型在训练数据里死记硬背的网络礼仪撞上系统提示词的软约束,它毫不犹豫地选择了讨好外部网站。社区评论区里那句嘲讽可谓一针见血,在凭感觉编程的时代,出了事把锅推给智能体自己干的,工程师就能全身而退。
漏掉半边天的确定性补丁
如果只是模型不听话,在工程外围加一道硬拦截也算亡羊补牢。poteat 在回应中特意强调,官方已经在2026年11月3日发布的 v2.1.317 更新中,默认内置了一个名为 cc-plugin-privacy 的插件,用来做确定性拦截,用户也能通过 /plugins 命令管理它。

但仔细对一下版本号就会发现一处尴尬的冲突。发帖控诉的开发者运行的正是 v2.1.318,按理说已经躺在了这个隐私补丁的保护伞下。当然,原帖并没有附上抓包请求头或复现步骤,我们没法铁口直断他收到的诈骗邮件到底是早期版本泄露后的延迟轰炸,还是在最新版里被当场穿透。
但去翻看 Anthropic 随后公开的 cc-plugin-privacy 源码与说明文档,谜底其实已经写在了脸上。这个被官方拿来当挡箭牌的确定性拦截,在架构上是个标准的漏勺。
源码文档自己承认,该插件只干一件事,就是盯着 Shell 工具调用,看里面是不是同时出现了账户邮箱和 User-Agent 这两个词。只要换个姿势,防线立刻失效:
- 它不管
User-Agent之外的任何其他外发字段。 - 它完全不覆盖内置的 WebFetch 与 WebSearch 工具,也不管 MCP 调用。
- 它拦不住运行时动态计算或编码拼接出来的邮箱字符串。
回头看 #107757 苦主的原话,他控诉的恰恰是在进行网络搜索时遭遇泄露。用一把只锁得住命令行里特定字眼的锁,去防备一个拥有多种联网工具的智能体,无异于掩耳盗铃。
更荒诞的是,这道防不住外贼的铁栅栏,先把自家人绊倒了。就在补丁上线第二天的2026年11月4日,另一位开发者提交了 Issue #107144。他在 v2.1.317 和 v2.1.318 中开启了 --dangerously-skip-permissions 无头自动化模式,结果这个隐私插件依然跳出来强行拦截,甚至在写本地文件和发起本地回环请求时疯狂触发误报。
为了让人手写好的自动化流水线跑通,这批重度开发者被迫钻进 ~/.claude/settings.json 配置文件,亲手把 "cc-plugin-privacy@builtin": false 写进去。一个安全补丁做到漏报与误报齐飞,最后逼着用户主动关掉防线,这在软件工程上实在算不上一份及格答卷。
别拿对齐问题给架构懒政挡枪
我最不买账的地方,是维护者把这起事故拔高成模型对齐的哲学难题。

《韩非子》里讲过一句大白话,叫作千丈之堤,以蝼蚁之穴溃。放在传统的网络安全和操作系统的权限设计里,有一条铁律叫最小权限原则。一个负责写代码、跑终端的智能体,在绝大多数场景下根本不需要知道当前登录用户的真实个人邮箱是什么。哪怕极少数与账户绑定的操作需要用到身份凭证,也应该由底层的确定性代码在受控通道里隐式完成签名,而不是把明文邮箱像撒胡椒面一样丢进大模型的上下文窗口里。
把明文隐私喂给概率黑盒,再靠外围正则去赌模型的花样,从架构第一天起就输了。
Anthropic 的工程师们图省事,先把敏感变量塞进上下文,指望靠一句提示词让模型管住手;等发现模型在外部 API 规范的诱导下频频越界,又不舍得重构底层框架把 userEmail 挪出去,而是糊了一个静态文本匹配的插件上去交差。更有社区用户在工单里指出,早在7月份就有编号为 #81138 的相关问题提交,面对仓库里积压的 5000多个 Issue,官方往往要等到事情在社交网络上闹大了才掏出一个半成品插件。
- 风险.只要底层框架继续把个人邮箱、环境变量或内部域名默认塞进模型上下文,任何外围的黑名单正则拦截都挡不住模型换个字段、换个工具把数据送出去。
这事给所有正在用或者正在造 Coding Agent 的团队提了个醒。过去的网页爬虫规范是写给死板脚本看的,而今天的智能体既有全局上下文,又懂全网礼仪,还会自己拼装请求。当外部世界的旧规矩变成了套取模型内部上下文的诱饵,唯一安全的做法就是物理隔离。不想让智能体说漏嘴的秘密,打一开始就别让它听见。
