10 月 29 日太平洋时间凌晨 2:27 到下午 1:35,大约 11 个小时里,Cursor 扩展市场上的 anthropic.claude-code 版本 2.1.313 并不是 Anthropic 发的。这个构建会在开发者机器上写入一把攻击者控制的 SSH 公钥,尝试建立反向 SSH 隧道,并安装持久化。凡是把 Claude Code 设成自动更新的用户,都可能在打开编辑器的那一刻中招。Cursor 给出的影响上限是 5000 人。
事件概述
恶意版本沿用了合法的扩展 ID 和发布者身份,不是仿冒的相似名称 —— 这让「看名字对不对」这类防护彻底失效。Cursor 在确认后将其从市场移除,并出于谨慎整体关闭了扩展市场;Anthropic 已于 10 月 30 日发布 2.1.314,同步到 Open VSX 与微软 VS Code 市场。据 Cursor 说明,事件仅涉及 Cursor 市场,未发现 Open VSX 和微软市场被波及,也未发现其他扩展被篡改。攻击者的服务器已由托管云厂商下线。
攻击者如何取得该扩展的发布权限,目前没有公开结论。
技术细节
据 OpenSourceMalware 联合创始人 Jenn Gile 的说法,这个包自称 anthropic.claude-code 2.1.313,在主 JavaScript bundle 的最前面插入了一段 66 行的恶意 loader,后面的合法扩展代码原封不动。功能、界面、版本号都对得上,只有加载时多跑了一段。
触发时机是 VS Code 启动之后、以及扩展的 webview 打开时。执行动作分四步:
- 采集主机信息:从
api.ipify.org取公网 IP,加主机名、本地用户名、操作系统与 CPU 架构、home 目录、当前工作目录、git config --global user.email,以及最多 40 个名字里含 KEY、TOKEN、SECRET、PASS、AWS、GCP 的环境变量名(只取名字,不取值)。 - 向
~/.ssh/authorized_keys追加一把攻击者公钥,注释写成svc-telemetry,伪装成正常遥测。 - 尝试启用本地 SSH 服务,并向
134.209.82.225建立反向隧道。 - 安装持久化:macOS 走 LaunchAgent
com.apple.sysmond.plist,Windows 建计划任务SysMon,另在启动目录落sysmon.cmd;后台脚本约每 60 秒重试一次隧道。
回传走明文 HTTP,目标 134.209.82.225:8099/beacon。
有意思的是代码本身有 bug。启用本地 SSH 需要管理员权限,而扩展在多数 macOS 和 Windows 主机上并没有这个权限,这一步会失败;在 macOS 上它还用非提权身份去跑 systemsetup -getremotelogin,直接报错。所以很多机器上攻击者其实进不来。但公钥已经写进去了,持久化已经装上了,主机信息也已经发出去了 —— 三者都不依赖那一步成功。
影响评估
5000 是个上限,不是确认受害者数。真正需要警惕的是「SSH 本来就开着」的那部分主机:对它们来说隧道是通的,等于开发机直接对外开门。而开发机上通常放着 Git 凭据、CI/CD 令牌、云厂商密钥,以及能连到生产网络的 SSH 私钥。
这已经是十月里第二起同类型事件。往前一周多,攻击者通过盗取的 GitHub 账号(HassenBF,2026 年 3 月被拿下)替换了 OVHcloud 官方 CLI 五个已发布版本的二进制,属 GlassWorm 行动的一部分。开发工具链正在成为主战场,而且打法一致:不动源码仓库,直接换分发出去的那一份。
修复建议
卸载或升级扩展都不清后门,必须手工处理。
# 1) 查版本
code --list-extensions --show-versions | grep claude-code
# 2) 查可疑公钥(注释为 svc-telemetry)
grep -n "svc-telemetry" ~/.ssh/authorized_keys
# 3) 查持久化(macOS)
ls -l ~/Library/LaunchAgents/com.apple.sysmond.plist
ls -la ~/.config/.smt ~/.config/.smtk
# 4) 查持久化(Windows,管理员 PowerShell)
schtasks /query /tn SysMon
Windows 上还要额外检查 C:\ProgramData\ssh\administrators_authorized_keys,以及 %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\sysmon.cmd、%USERPROFILE%\.config\smt.cmd。日志侧可以按这几条命令找痕迹:ssh -N -R '*:0:localhost:22'、autossh -M 0、schtasks /create /tn SysMon、systemsetup -setremotelogin on。
处置顺序建议:先隔离主机,再清公钥与持久化,然后升级到 2.1.314,最后轮换这台机器上出现过的全部凭据与会话,包括 Git 令牌、云密钥和 SSH 私钥。Cursor 会直接联系受影响用户,并提供了 macOS 与 Windows 的清理脚本、文件哈希和密钥指纹清单。
制度层面更该改的是自动更新。扩展和插件市场默认信任发布者身份,而这次出问题的恰恰是身份本身;对开发机这类高权限终端,新版本先观察再放量,比事后清后门便宜得多。