返回资讯中心
外部精选
软件工程
#开发者实时流

Claude Code 被曝将用户邮箱写入请求头,Anthropic 回应并承诺修复

来源标题:How to block the Claude Code email leak

Claude Code 曾被发现在自身发起的网页请求 User-Agent 中写入已登录用户的邮箱地址,Anthropic 已通过默认开启的 cc-plugin-privacy 插件临时拦截。Claude Code 团队成员 Lydia Hallie 表示,将从提供给模型的上下文中移除账户邮箱,预计下周初发布修复版本。该问题于 2026 年 11 月 5 日在 GitHub 上提出,次日获得超过 750 个反应。

Hacker News 最新titusblair2026/11/6 · 今天18 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

Claude Code 有时会把已登录用户的邮箱地址写进它自己构建的 web 请求的 User-Agent 里。我们读了 Anthropic 这个临时检查的源码,列出它覆盖了什么、没覆盖什么,并给出一个脚本用来扫描你自己的会话,还有一个 hook,在真正的修复发布之前拦截这个地址。

2026 年 11 月 5 日 22:13 UTC,一位用户在 Claude Code 的 GitHub 仓库开了 issue 107757。他写道,macOS 上 2.1.318 版的 Claude Code 未经询问就把他的邮箱地址放进了 web 请求的 User-Agent 头,而他现在每天都收到诈骗邮件。到 11 月 6 日早上,这个 issue 已经有 750 多个 reaction 和 87 条评论,它的 Hacker News 帖子超过 1,390 分。

Anthropic 的一位贡献者 mpoteat 在一小时内回复说,一个名为 cc-plugin-privacy 的内置 mod 在 2.1.317 及之后版本中会拦截这个行为,且默认开启。11 月 6 日 UTC 早些时候,负责 Claude Code 的 Lydia Hallie 在 Hacker News 上写道,团队正在从 Claude Code 提供给模型的上下文中移除账户邮箱,预计下周初发布,并为此道歉。

Hallie 的说法是:用户曾反馈 Claude 在 @author 标签这类地方编造名字,于是 Claude Code 开始把已登录账户的邮箱给模型。当 Claude 随后自己写命令时,比如一次 curl 调用,它有时会把这个地址用作 User-Agent 里的联系方式。

脚本想在 User-Agent 里放联系方式是有正当理由的。Wikimedia 的 User-Agent 政策要求脚本客户端表明身份并提供联系运营者的方式,它接受邮箱地址。SEC 要求自动化 EDGAR 客户端发送带公司名和管理员邮箱的 User-Agent。一个被要求做礼貌客户端的模型,面前恰好只有一个邮箱地址,就会填那一个。

不只是内置的 web 工具。一位评论者扫描了自己的 transcript,报告了 8 个会话中 53 次调用把他的地址放进了 User-Agent,几乎全部来自子代理自己写的 curl -A 行。另一位发现模型还会根据正在处理的项目为 User-Agent 编造产品名,所以这个头可以把你的身份和你的工作绑在一起。这两条都是用户报告,我们没有复现。

Anthropic 于 11 月 6 日在 claude-code 仓库的 mods/privacy 下发布了这个 mod 的源码。它注册了一个 tool.check hook,且只对三个工具运行:Bash、PowerShell 和 Monitor。

拦截时不弹任何提示。它的 README 说,已保存的 allow 规则和 auto 模式的分类器都无法绕过它,并把整个检查描述为两次词匹配、没有解析器,且这是有意为之。

README 称这个 mod 是一种礼节,而不是边界,并列出了哪些情况能通过。以下是它自己的说法整理成的列表:

有两点对不上。Hallie 在 Hacker News 上写道,这个 mod 会在 Claude 运行 web 工具调用之前询问你。而发布的源码里没有提示,其 README 也说 web 工具不被检查。另外在 2.1.317 和 2.1.318 上,macOS 和 Windows 用户贴出测试:mod 显示已加载,却仍然放行了一次带自己地址、指向 .invalid 主机的 curl -A 调用。截至 11 月 6 日 08:30 MST,Anthropic 尚未在 issue 中回应这些报告。

Hallie 指出 stable 渠道仍停留在 2.1.311。我们 11 月 6 日查了 npm:stable 标签是 2.1.311,latest 是 2.1.318,next 是 2.1.319。2.1.317 发布于 11 月 2 日。所以任何锁定 stable 渠道的人,邮箱在上下文里,而且根本没有这个 mod。

claude --version npm view @anthropic-ai/claude-code dist-tags

on November 6, 2026: stable 2.1.311, latest 2.1.318, next 2.1.319

在 Claude Code 内部打开 /plugins,确认 cc-plugin-privacy 显示为已安装并已启用。

Claude Code 把每个会话保存为 ~/.claude/projects 下的一个 JSON Lines 文件。这个扫描从 ~/.claude.json 读取你的账户地址,然后列出每个会话文件——其中某次工具调用的内容同时包含该地址和 User-Agent 字样或 -A 参数。它只打印路径和数量,绝不打印地址。我们在一个真实安装上跑过,确实找到了匹配,所以这个风险不只是理论上的。

scan.py: list Claude Code sessions where a tool call held your account email and a User-Agent.

It prints file paths and a count, never the address itself.

import json, os, glob, re email = json.load(open(os.path.expanduser("/.claude.json"))).get("oauthAccount", {}).get("emailAddress", "").lower() files = 0 for f in glob.glob(os.path.expanduser("/.claude/projects/**/*.jsonl"), recursive=True): for line in open(f, errors="ignore"): low = line.lower() if '"tool_use"' in line and email and email in low and re.search(r"user[-_]?agent|\s-a\s", low): files += 1 print(f) break print(files, "session file(s) with a tool call that holds your address and a User-Agent")

命中意味着模型写过这样一次调用。它不能证明请求到达了服务器,因为调用可能失败或被拒绝。打开文件读那次调用,看主机是谁。

Claude Code 的 hook 会在工具调用之前运行你自己的代码。对于 PreToolUse hook,退出码 2 会拦截这次调用,hook 打印到 stderr 的任何内容都会作为理由回传给 Claude。这个 hook 是刻意粗暴的:它拒绝任何输入中包含你的账户地址或全局 git 邮箱的调用,无论出现在哪个头、body 还是文件里,也拒绝任何读取 git user.email 的调用。

#!/usr/bin/env python3

~/.claude/hooks/no-my-email.py: refuse any tool call that holds my email address.

import json, os, subprocess, sys event = json.load(sys.stdin) text = json.dumps(event.get("tool_input", {})).lower() mine = set() try: mine.add(json.load(open(os.path.expanduser("~/.claude.json")))["oauthAccount"]["emailAddress"].lower()) except Exception: pass git = subprocess.run(["git", "config", "--global", "user.email"], capture_output=True, text=True).stdout.strip().lower() if git: mine.add(git) if any(m and m in text for m in mine) or "user.email" in text:

(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →