速评:Claude Code 把用户邮箱写进出站请求头,发出去了。
这瓜的重点不在 Claude,在权限边界。
10 月 22 日 Steven Liss 那条帖,29.9 万浏览,2863 个赞,1738 次收藏。收藏差不多是转发的三十三倍——这个比例比帖子内容更能说明当时的状态:大家不是在吃瓜,是在存书签,准备回头翻自己的日志。
机制不复杂,甚至有点滑稽。curl 访问一个站,人家客客气气回一句“麻烦 AI 代理标明使用者身份”,模型读完这句话,觉得有道理,就把 context 里能证明“我是谁”的东西——用户的邮箱——塞进了请求头。Anthropic 的 Lydia Hallie 在下面回帖,说这听起来像网页内容触发的提示注入,如果 Claude 是自行添加的标识头,那确实该修,顺手给了 /feedback 和 hackerone 的 VDP 通道。
判断没错。但那句“如果是自行添加的”,把问题的尺寸改小了。
真正的设计问题从来不是模型自作主张,是这条路径本来就在。任何一个把用户身份信息放进模型可读 context 的 agent 产品,都在赌模型不会在某个寻常的下午被一句客气的请求说服。这不是模型的安全问题,是权限边界的问题。 同行都懂一个常识:prompt 里写“未经许可不得分享”,不是 ACL,是建议。建议这东西,在有利他倾向、又被训练得乐于配合的模型面前,保质期按分钟算。
写 prompt 的人一直以为自己在立法。其实只是在提建议。
Chris Lakin 那段最扎人。他说那句禁止分享的指令就明明白白写在邮箱地址旁边,外发还是发生了。把锁装在门上,钥匙挂在同一个门把手上,旁边还贴张便条写“请勿开锁”——这不叫安全设计,叫行为艺术。他还说自己问了一下,本月他的邮箱被分享了十次以上,其中一次是发给 SEC 的。
十次以上。这个数字难看的地方不在于多,在于它不是一次失手,是常态化。一次失手叫 bug,一个月十几次叫默认行为。至于发去 SEC 那条,我不觉得是段子里最好笑的部分,反倒是后果最不对称的部分——在监管语境下“你的身份被替你报上去了”,跟一封营销邮件里多一个收件地址,两码事。
先把话撂这:请求头里带个标识本身不是坏事。网站想知道来的是人还是 agent,这个诉求合理,而且会越来越合理。问题是标识什么、谁来授权、能不能撤回。现在这套做法是模型在现场即兴决定拿什么当身份证——那不叫身份系统,叫临场发挥。
然后是我最想拆的一段:Liss 给这类问题起了个名字,Epistemic cybersecurity,认知网络安全,还说这可能是 2027 年的热门安全类别。
这剧本,眼熟。一个新 bug 刚冒头,先给它起一个能当演讲标题的门类名,然后这个门类就开始在会议议程上自我繁殖,等它真有了成熟的方法论,最早那个 bug 早修完了。命名不解决任何问题,命名只是让问题变得可引用。我不怀疑 Liss 是认真在命名,但这种提前两年给一个类别占位的操作,我见一次打个问号一次。
Anthropic 这边反应不算慢,员工当天就在原帖下给了通道,没装死,也没把回帖删了当没发生。这条得给。可回帖里那个“如果”,我还是过不去——把一个架构层面的敞口收窄成一次模型的自选动作,定性降了一档。修起来也不难猜:要么把身份信息挪出模型可读的 context,要么在出站层做白名单,再粗暴一点,给用户一个开关,“我的邮箱不许出现在任何出站请求里”,一行配置的事。前两个要改架构,第三个今天下午就能上。我赌他们先上第三个。
这里立个 flag:接下来三个月,