夜雨聆风学习资料网

ARTICLE · 1288445

假 Claude Code 插件上架 11 小时:最多 5000 个开发者的 SSH 钥匙被改了

假 Claude Code 插件上架 11 小时:最多 5000 个开发者的 SSH 钥匙被改了

10 月 30 日早上,Cursor 在自家博客上发了一份安全公告。标题很干:Cursor VS Code 扩展市场里发现了 Anthropic.claude-code 2.1.313 的恶意版本。

公告里第一句该划出来的是:这个恶意版本不是 Anthropic 开发的。

第二句是影响面:最多 5000 名用户中招,Cursor 说会直接联系到人。

时间窗口精确到分钟。10 月 29 日太平洋时间凌晨 2:27 挂上去,下午 1:35 下架。换算成北京时间,是 29 日傍晚到 30 日凌晨四点出头,前后 11 小时零 8 分钟。

这 11 小时里,插件在做什么。

第一步是收信息。主机名、用户名、操作系统、CPU 架构、home 目录路径、环境变量名、工作目录、Git 里配的邮箱、还有公网 IP,一项不落。这些单独看都不算什么,凑在一起就是一张能认出"这是谁、这台机器干什么活"的卡片。

然后往 authorized_keys 里塞攻击者的公钥,公钥的标签叫 svc-telemetry。接着尝试打开本机 SSH 服务,再开一条反向 SSH 隧道把端口转出去。持久化靠 macOS 的 LaunchAgent 和 Windows 的计划任务,Windows 那条还配了一个 Startup 脚本兜底,试图以 SYSTEM 身份跑。后台脚本大约每 60 秒重试一次隧道。

主机信息和后门状态通过 HTTP POST 报回 8099 端口上的 /beacon。

到这里为止是完整的攻击链。接下来是公告里最有价值的一段自我拆台:Cursor 说,除非是在极不寻常的情况下用管理员权限启动 Cursor,否则这一步会失败——因为恶意代码本身有错误。

意思是那条反向隧道大概率没打通。原因是打开本机 SSH 服务需要管理员权限,而这个插件在绝大多数 macOS 和 Windows 机器上拿不到这个权限。攻击者因此没法通过隧道登录进来。

但 Cursor 紧接着说了另一半:插件仍然加上了攻击者的 SSH 公钥,仍然装上了持久化,仍然把主机信息发给了攻击者。

这两句话放一起,结论才是完整的。

Cursor 的处置动作很干脆:立刻下架恶意版本并阻断分发,然后出于谨慎,把整个 VS Code 扩展市场关停。审计了访问记录,确认没有其他扩展被动过手脚。轮换密钥、重建市场、重新上线。同时联系了托管攻击者服务器的那家云厂商,把服务器下线了。

所以现在那个 IP 是不通的,反向 shell 和 beacon 都不工作。Cursor 给出的受影响用户处置指引有五条,核心是三条:跑检测命令、在 endpoint 和网络日志里搜 IOC、隔离有执行痕迹的机器。

第四条是容易被忽略的:卸载扩展不一定够。恶意载荷会丢下独立的持久化脚本,扩展卸载了,脚本还在跑。所以官方给了 macOS 和 Windows 两个修复脚本,macOS 的要拿受影响用户身份跑,不要用 root,Windows 的要用管理员权限的 PowerShell。

第五条更该听:轮换所有能在这台机器上访问到的凭证和会话,而且要在一台可信的系统上做。公告里给的理由是,收集环境变量名这件事本身信息有限,但不排除攻击者之后通过已经装好的后门拿到凭证。

排查的东西 Cursor 也列全了。macOS 看 ~/.ssh/authorized_keys 里有没有 svc-telemetry 这个标签的公钥,Windows 查两个位置,%USERPROFILE%\.ssh\authorized_keys 和 C:\ProgramData\ssh\administrators_authorized_keys。

包体的 SHA-256 也给了,darwin-arm64 和 win32-x64 两个版本各一个,附 MD5。攻击者端点 134[.]209[.]82[.]225,反向 SSH 走 TCP 22,beacon 是 hxxp://134[.]209[.]82[.]225:8099/beacon。持久化文件在 macOS 上是 ~/.config/.smt、~/.config/.smtk、临时目录里一个 .stk_ 开头的十位十六进制名,还有 ~/Library/LaunchAgents/com.apple.sysmond.plist;Windows 上是 %USERPROFILE%\.config\smt.cmd、smtk,计划任务名叫 SysMon。进程命令行特征是 ssh -N -R '*:0:localhost:22' 和 autossh -M 0。

还有两个 SSH 密钥指纹,一个属于被塞进去的公钥,一个属于反向隧道。

这份公告里有一处没说,而这一处可能比所有 IOC 都重要:它没说这个恶意版本是怎么进到市场里的。

不是开发者失误也不是打包流程疏漏——公告的措辞是"今天我们发现了一起涉及某个扩展包的安全事件",至于这个包是谁上传的、走的什么审核流程、为什么能在挂着 Anthropic 名义的条目下存活 11 小时,全篇没提。

一份事故公告不交代入口,是正常的。安全公告给你的是"怎么查、怎么修",不是"谁干的"。但对一个做 IDE 的公司来说,它的扩展市场是整个 AI 编程生态里最像官方渠道的地方之一——想用 Claude Code,在 Cursor 里装扩展是最顺手的动作,装的人不会多想一步。攻击者赌的就是这个不设防的信任。

这类手法在这个圈子里不是第一次。

2025 年 5 月,安全公司 Socket 在 npm 上抓到三个包,sw-cur、sw-cur1、aiide-cur,下载量加起来超过 3200 次。它们的介绍写着"给你的 macOS 版 Cursor 提供最便宜的 API"。装上之后,脚本会从远程服务器拉取有效载荷,用恶意逻辑替换 /Applications/Cursor.app/ 里的 main.js,再禁用自动更新,这样即使包被删了,篡改过的代码还能继续跑。研究者 Kirill Boychenko 那句话说得挺准:攻击者蓄意利用开发者的日常工作流,以及 IDE 的信任边界。

同一年,Socket 还抓到两个把加密货币钱包数据传到 Telegram 机器人的包,其中 debugdogs 只是调用另一个包的主逻辑,纯粹是个二次感染的包装器。

一年半过去,目标还是 Cursor,路径换成了扩展市场本身。手法从改本地文件变成伪装成官方插件投递,攻击面在收紧,精准度在提高。

顺带说一件公告里没有、但能推出来的事:这批人盯的是 AI 编程工具的使用者,不是随机挑目标。Socket 那次抓到的诱饵是"最便宜的 Cursor API",这次伪装的是免费但正牌的 Claude Code 插件。两条都在同一个位置——用户为了省钱或图省事,愿意从不太起眼的地方装东西,而那个位置的信任成本最低。

对读者有用的部分很具体。

如果你在 10 月 29 日那天从 Cursor 的扩展市场装过或更新过 Anthropic.claude-code 2.1.313,先去跑那条 grep。有就按官方脚本清,凭证全部换掉,在干净机器上做。没有就不用紧张。

如果没装过,这篇文章对你唯一的用处是记住那个动作本身。装插件的时候多看一眼发布者名字和版本号,尤其是名字看起来很官方的时候。官方市场不等于官方出品,这次就是靠"看着像"进去的。

Cursor 这次做得算到位:当天发现当天下线、整个市场关停、主动联系受影响用户、把 IOC 写到可以复制粘贴、连攻击者服务器都帮忙打掉了。这些动作的价值不在于事后补救做得多好,而在于它没有把"最多 5000 人"这个数字往小里说。

真正需要等的,是那份还没来的东西:入口是怎么被打开的。

回首页,搜索你想要的文档

在首页搜索框输入关键词,快速定位资料

文库首页搜索指引 立即搜索

相关学习资料