post cover

AI 热点快报:Claude Code 扩展被植入 SSH 后门,AI 编程工具进入供应链战争(2026-10-31)


事件与背景

10 月 29 日,Cursor 在自家博客发布安全公告:Cursor VS Code 扩展市场里的 Anthropic.claude-code 2.1.312 与 2.1.313(Windows/macOS 版)是被篡改的恶意版本,并非 Anthropic 构建。投放窗口约为太平洋时间当天 02:27 到 13:35,接近 11 个小时。

恶意代码干的事很具体:收集主机名、用户名、操作系统与架构、home 目录、环境变量名、工作目录、git 配置的邮箱和公网 IP 并回传;向 ~/.ssh/authorized_keys 追加一把标注为 svc-telemetry 的攻击者 Ed25519 公钥;尝试打开本机 SSH 服务并建立反向隧道;再用 macOS 的 LaunchAgent 或 Windows 的计划任务(尝试以 SYSTEM 运行,并留一个启动脚本兜底)把隧道做成持久化,后台脚本约每 60 秒重试一次。

Cursor 的处置是:立即下架该版本、随后整体关停扩展市场、审计确认其他扩展未被改动、轮换密钥、重建市场后重新上线,并与托管商合作把攻击者服务器下线。公告称该 C2 已不可用,反向 shell 与主机信息上报均已失效。

Anthropic 方面的口径由员工 Felix Rieseberg 在 HN 讨论中给出:这不是 Anthropic 系统或员工电脑被攻破,而是有人利用对 Cursor 扩展市场的访问权限,发布了一份他们没构建、没发布的篡改副本;官方渠道的版本不受影响,只影响 Cursor 用户。

安全厂商 Phorion 在 10 月 30 日补了技术细节:注入方式是在压缩后的 extension.js 开头塞一段 IIFE,Node 加载文件时就执行,不需要用户点开或激活扩展;代码里同时含 macOS、Linux、Windows 三套路径。它还指出 macOS 上有个实现 bug——systemsetup -getremotelogin 未提权时只打印权限错误并以 0 退出,脚本因此判定「不是 Off」,跳过了开启 SSH 那一步,于是「已有密钥 + 已落持久化」但入站通道没打开。

登记处状态我逐个查过:npm 上 @anthropic-ai/claude-code 的 latest 已是 2.1.314(10 月 30 日 00:12 UTC 发布),2.1.313 在版本清单里已完全不存在;Open VSX 的 latest 同样是 2.1.314,allVersions 里有 2.1.312(10 月 27 日 20:26 UTC)、没有 2.1.313。

来源:

为什么现在重要

1. 开发机成了最高权限的攻击面,而 AI 编程工具正好住在那里。 扩展以 IDE 和当前用户的权限运行,一加载就能读源码、读 ~/.ssh、读 shell 历史和本地凭据。判断:评估 AI 编码工具时,「它能做什么」之外要加一栏「它被替换后能拿走什么」。

2. 「官方发布」不再是信任边界,签名和发布者 ID 只回答「谁上传的」。 出问题的不是仿冒包,而是同名字、同发布者下的正式版本被改包。判断:信任模型要从「认发布者」迁移到「认构建产物」——锁版本、校验 hash、可复现构建。

3. 攻击者的目标不是 IDE,是 shell。 追加公钥 + 开 SSH + 反向隧道 + 60 秒重试,指向长期交互式访问,而非一次性窃密。判断:对持有生产凭据的团队,一台开发机被拿下等价于 CI/CD 被拿下。

4. 处置手段是「整个市场关停」,说明单点分发层是生态级可用性风险。 一家市场的安全问题会让所有插件的安装与更新同时中断。判断:依赖单一扩展市场的团队应假设它会突然不可用,把工具链版本固化进镜像。

5. 恶意代码本身写得很糙,这不值得庆幸。 macOS 的 SSH 开启逻辑、Windows 走 /bin/sh 都是明显错误。判断:防守不能建立在对手水平低上;这次是「后门没接通」,不是「后门不存在」。

工程师/产品人今天能做什么

  1. 先花 30 秒自查。 macOS 执行 grep -qs svc-telemetry ~/.ssh/authorized_keys && echo FOUND || echo clean;Windows 在 PowerShell 里对 $HOME\.ssh\authorized_keys 和 C:\ProgramData\ssh\administrators_authorized_keys 做 Select-String svc-telemetry。注意:Phorion 提醒代码只判断注释字符串,排查时应改看公钥指纹,别只 grep 注释。
  2. 核对版本与渠道。 claude --version 与 IDE 扩展面板都看一遍;升到 2.1.314,并确认来源是官方渠道。任何仍停留在 2.1.312/2.1.313 且来自 Cursor 市场的安装,按受影响处理。
  3. 把「卸载」当成第一步而不是最后一步。 payload 会落下独立的持久化脚本,卸载扩展未必清干净。检查 ~/Library/LaunchAgents、计划任务、异常监听端口与反向 ssh 进程,然后在另一台可信机器上轮换该主机可达的凭据:SSH key、云 AK/SK、git/npm token、CI secrets。
  4. 给所有 AI 编码工具加一层隔离。 用容器或 VM 跑 agent,工作目录只挂载项目子目录,别用管理员/root 启动 IDE,也别把 ~/.ssh 和云凭据目录挂进去。
  5. 把扩展纳入资产清单。 记录 扩展名 + 版本 + 来源市场 + 安装时间,把「扩展安装/更新」事件接进日志告警,并考虑关闭自动更新或走延迟更新通道——这次从投放到发现用了 11 小时,自动更新意味着 11 小时内所有在线机器都会中招。

待观察

  1. 初始入侵路径尚未公开。 Anthropic 说不是自家系统被攻破,而是「对 Cursor 市场的访问权限」被利用;究竟是账号被盗、token 泄露还是发布流程缺陷,决定了 Open VSX 上其他发行商是否同样暴露。
  2. 影响面没有数字。 下载/安装量、受影响主机数、是否逐一通知用户,目前都没有公开;Cursor 只说「无证据显示其他扩展被改动」。
  3. 平台范围两方说法不一致。 Cursor 公告只列 Windows 与 macOS,Phorion 的代码分析里含 Linux 分支;另外 2.1.312 在 Open VSX 与 npm 上仍可下载(时间戳 10-27,早于事件窗口),它是干净构建还是同一批被改包,需要官方给出 hash 对照才能定论。