最近两周,Hacker News 上和 Claude Code 有关的三条安全新闻都上了千分级别。楼主把能确认的事实和自查步骤整理在一起,用 Claude Code 的朋友建议都过一遍。
一、Claude Code 会把你的账号邮箱写进请求头,发给网站
- 怎么回事:有用户在 GitHub 上报告(issue #107757),Claude Code 联网时,把他的邮箱写进了请求的 User-Agent,之后他每天收到几十封诈骗邮件。有用户统计,这条在仓库 1.6 万多个未关闭的 issue 里,反应数排到了第四。
- 官方的解释:Claude Code 团队的 Lydia Hallie 在 Hacker News 上说明:为了避免 Claude 在
@author这类地方瞎编名字,他们把登录账号的邮箱放进了给模型的上下文。有些网站(比如维基百科、美国证监会的数据接口)要求脚本在 User-Agent 里留联系邮箱,Claude 自己写curl这类命令时,有时就把你的邮箱填了进去。她表示「这本不该发生」,下一个版本会把邮箱从上下文里去掉。 - 现在的状态:2.1.317 起有一个默认开启的内置模块,在网络或 shell 命令里出现你的账号邮箱时先问你;更新日志里也写了这一条。但官方说明它拦不住所有情况,比如 Claude 自己写一个脚本再去运行;issue 里也有用户在 2.1.318、2.1.319 上测出没拦住。截至发稿,最新版本是 2.1.319,「从上下文里移除邮箱」的版本还没出。
- 你可以做:
- 升级到最新版;
- 让 Claude 帮你翻一下
~/.claude/projects/下的会话记录,看看有没有把你的邮箱写进 User-Agent 的命令。issue 里有人这样查,翻出了 8 个会话里的 53 次; - 需要联网抓数据时,看一眼它要执行的命令。
二、Cursor 插件市场上的 Claude Code 扩展被植入后门
-
怎么回事:10 月 29 日,太平洋时间凌晨 2:27 到下午 1:35,Cursor 自己的扩展市场上出现了被篡改的 Claude Code 扩展(2.1.312 和 2.1.313)。安全公司 Phorion 最先披露。按 Cursor 的官方通知,它会:
- 收集主机名、用户名、系统、Git 邮箱、公网 IP、环境变量名等信息,发给攻击者;
- 往
~/.ssh/authorized_keys里加一把攻击者的 SSH 公钥(备注是svc-telemetry),并尝试打开本机 SSH 服务、建立反向隧道; - 写入开机自启:macOS 是 LaunchAgent,Windows 是计划任务或启动文件夹脚本。
-
影响范围:Cursor 说,大多数 macOS、Windows 机器上,开启 SSH 服务需要管理员权限,这一步会失败,攻击者无法通过隧道登录;但公钥、自启项和主机信息上报都已经发生了。攻击者的服务器已被关停。Anthropic 员工在 HN 上说明:Anthropic 的系统没有被入侵,官方 VS Code 扩展市场和 OpenVSX 上的版本都不受影响,只影响从 Cursor 扩展市场安装的用户。
-
如果你在那段时间用 Cursor 装过或更新过 Claude Code 扩展,按 Cursor 的建议:
- 检查有没有被加了公钥:
grep svc-telemetry ~/.ssh/authorized_keys- macOS 再查一下有没有这两样东西:
~/Library/LaunchAgents/com.apple.sysmond.plist、~/.config/.smt(Phorion 列出的自启文件)。 - 有就删掉公钥和自启项。只卸载扩展不够,它放下的脚本会继续运行。
- 在另一台可信的机器上,轮换这台电脑上能接触到的密钥和登录会话。
三、点了「不再询问」,密码被提交到了 GitHub
- 怎么回事:安全公司 Apiiro 发文说,在公开的 GitHub 仓库里找到了 1,122 个文件,泄露了密码等敏感信息(HN 讨论)。
- 机制(按 Claude Code 官方文档和 HN 上的讨论):
- 你在权限提示里选「Yes, and don’t ask again」,这条命令会被原样存成一条允许规则,写进
.claude/settings.local.json。如果命令里直接带着密码,密码也就存进了这个文件。 - 这个文件本来就不该提交。官方文档写明:Claude Code 自己创建这个文件时,会自动把它排除在 git 之外;但如果是你手动创建的,要自己加进
.gitignore。 - 所以准确地说,问题出在把
.claude/整个目录提交了上去,「不再询问」本身不会泄露什么。Claude Code 团队的 Boris 在 HN 上回复:他们以前没做过密钥清理,正在研究怎么防止这种情况;同时建议所有人都打开 GitHub 等平台的密钥扫描。
- 你在权限提示里选「Yes, and don’t ask again」,这条命令会被原样存成一条允许规则,写进
- 你可以做:
- 在自己的仓库里搜一下有没有提交过
.claude/settings.local.json;提交过的话,把里面出现过的密码全部作废换新,从 git 历史里删掉不等于没泄露过; - 别把密码、Token 直接写在命令里,改用环境变量或密码管理器,具体做法见 /t/105;
- 在 GitHub 仓库设置里打开 Secret scanning。
- 在自己的仓库里搜一下有没有提交过
这三件事有个共同点:Agent 能读写文件、执行命令、访问网络,它接触到的东西,就有可能被带出去。少给它不必要的权限,敏感的东西别交给它,比出了事再补救省心得多。
参考来源: