你给常用工具装了一次正常更新,得到的却可能是一把偷偷留给陌生人的家门钥匙。10月29日,Cursor Marketplace 中使用 Claude Code 合法扩展 ID 的一次更新遭到恶意修改:它试图在用户电脑上留下 SSH 远程入口,并把主机信息发给攻击者。
这不是 Anthropic 开发的官方版本主动加入后门。更准确地说,攻击者借用了 anthropic.claude-code 这个合法身份和发布渠道。问题因此更加棘手:用户看到的不是粗糙仿冒品,而是看起来可信的正常更新。
本文事实主要来自 The Hacker News 对 Cursor 和 OpenSourceMalware 说法的转述,缺少原始公告链接和独立交叉印证,具体影响仍应谨慎看待。
66行代码,藏在正常扩展前面
VS Code 扩展可以理解为编辑器里的小程序。它能增加功能,也往往可以读取项目文件、调用本机工具。Claude Code 这类编码 Agent——能替用户查看代码、执行开发任务的 AI 助手——接触的本机资源更多,因此安装来源格外敏感。
恶意版本号为 2.1.313。OpenSourceMalware 联合创始人 Jenn Gile 称,其主要 JavaScript 文件仍包含正常扩展代码,但最前面被插入了一个66行的恶意加载器。扩展会在 VS Code 启动以及网页视图打开时激活。
它首先尝试向 ~/.ssh/authorized_keys 写入攻击者的公钥,并把它标成看似普通的 svc-telemetry。SSH 是远程登录计算机的加密协议;authorized_keys 则像一份允许免密码进门的钥匙名单。只要攻击者的公钥留在里面,将来就可能成为远程入口。
随后,代码会在 Windows、Linux 和 macOS 上尝试开启 SSH 访问,并连接 134.209.82[.]225 建立反向隧道——由受害电脑主动向外连接,再给攻击者铺出一条返回本机的通道。它还分别利用计划任务、crontab 和 LaunchAgent 做持久化,也就是设法让恶意行为在重启或退出应用后继续存在。
与此同时,扩展会通过未加密 HTTP 向该地址的 8099/beacon 发送侦察信息,包括公网 IP、主机名、用户名、操作系统、CPU 架构、目录位置、全局 Git 邮箱,以及最多40个名称中带有 KEY、TOKEN、SECRET、PASS、AWS 或 GCP 的环境变量。初次通信没有直接发送这些变量的值,但变量名仍可能暴露机器配置了哪些云服务、持续集成系统或凭据类型。
后门很执着,落地并不顺利
据 Cursor 安全公告,这个恶意版本在10月29日太平洋时间凌晨2:27上线,下午1:35被撤下,存活约11小时。Cursor 随后暂时关闭整个扩展市场,轮换密钥并重建服务,还联系云服务商关闭攻击服务器。Cursor 给出的影响上限是5,000名用户;这不是确认有5,000台电脑已被攻破。
攻击代码也有明显限制。在多数 macOS 和 Windows 电脑上,开启本地 SSH 服务需要管理员权限,而扩展通常拿不到这个权限。因此,攻击者可能无法通过反向隧道真正登录。不过,失败并不等于无害:代码仍可能写入 SSH 公钥、设置其他持久化机制,并外传主机信息。
截至10月30日,恶意版本已经移除。Anthropic 已向 Open VSX 和 Microsoft Visual Studio Marketplace 发布 2.1.314。现有材料称,恶意包只在 Cursor Marketplace 被发现,尚无证据表明它进入另外两个市场;这只能说明目前没有发现,不能证明绝对未受影响。
真正危险的是更新渠道
这是典型的软件供应链攻击:攻击者不逐台入侵电脑,而是污染用户信任的软件或更新渠道,再搭乘正常安装、自动更新进入本机。对编码 Agent 来说,这条链尤其敏感。用户安装它,本来就是为了让它读代码、调用工具和处理开发环境;一旦扩展被调包,这些便利也会变成攻击面的放大器。
这起事件还有一层警示:市场里的合法扩展 ID、发布者身份和正常版本号,都不能单独证明包的内容可信。恶意版本甚至可能随着自动更新进入设备,用户未必进行过一次明显可疑的操作。
供稿称,Cursor 将直接联系受影响用户。安装窗口内获取过该版本的用户被建议隔离主机,删除未授权 SSH 密钥和持久化项目,并轮换凭据与登录会话。
局限与未知
- 攻击者究竟如何把未授权更新放进 Cursor Marketplace,目前仍不明确。
- “最多5,000名用户”只是影响上限,材料没有披露确认安装、成功持久化或实际被远程登录的人数。
- 目前没有观察到后续载荷;这不代表攻击者从未利用已建立的入口,也无法据此确定实际损失。