2026 年 10 月 29 日(北京时间 17:27 到次日 04:35,约 11 小时),Cursor 扩展市场里的官方 Claude Code 扩展被替换成一个 带 SSH 后门的恶意构建。受影响版本是 2.1.312 和 2.1.313,平台为 macOS arm64 和 Windows x64。Cursor 称最多约 5,000 名用户下载或自动更新过它。
这不是山寨插件混进了市场。 用户装到的包名是官方的 Anthropic.claude-code,界面和功能也和平时一样,所以很多人并不知道自己装过。也正因为如此,只卸载扩展或升级版本还不够。恶意代码已经写入一把 SSH 公钥、设置了开机自启的持久化脚本,并把主机信息发给了攻击者。真正需要收尾的是三件事:清掉 key、清掉持久化、轮换凭据。
核心价值:本文按「会看到什么 → 做什么 → 怎么判断成功」的顺序拆成 5 步。非安全专业的开发者照着做,大约半小时可以完成自查和清理,包括 API易 Key 的轮换。

图注:恶意窗口约 11 小时,2.1.314 是事件后第一个干净版本。
先别慌:Claude Code 扩展被投毒到底发生了什么
先把事实列清楚。下表的信息全部来自 Cursor 安全公告,以及 Anthropic 员工的公开回应。
| 项目 | 事实 |
|---|---|
| 事件 | Cursor 扩展市场中的 Anthropic.claude-code 被篡改,植入持久化 SSH 后门 |
| 受影响版本 | 2.1.312 和 2.1.313(Cursor 于 10 月 30 日更新公告时补入 2.1.312) |
| 平台 | macOS(darwin-arm64)、Windows(win32-x64);代码里也有 Linux 分支 |
| 暴露窗口 | 太平洋时间 10/29 02:27–13:35,即北京时间 10/29 17:27 – 10/30 04:35 |
| 影响面 | Cursor 称最多 5,000 名用户,这是暴露估计,不是确诊感染数 |
| 当前状态 | 恶意版本已下架;市场经过关闭、重建、审计后已恢复;Cursor 称攻击者服务器已被托管商下线 |
| 干净版本 | 2.1.314 是第一个干净版,截至 10 月 31 日最新为 2.1.316 |
图注:Cursor 安全公告页截图(编辑阶段补截图)。
事件刚出来时流传的说法有几处是错的,下面三点需要纠正:
- 2.1.312 也在受影响名单里。 Cursor 最初只公布了 2.1.313,后来补上了 2.1.312。如果你在窗口期内装的是 Cursor 市场里的 2.1.312,同样要排查。
- 只有 Cursor Marketplace 被投毒。 早期有报道说 Open VSX、微软市场、npm 也受影响,这些说法已经被更正。Socket 审计了注册表的变更记录,没有找到 2.1.313 的发布或删除记录。
- 2.1.313 从未在 Anthropic 官方渠道发布过。 Anthropic 安全工程师 David Dworken 表示,这个版本从未出现在 Open VSX、VS Code 官方市场或 Anthropic 的任何官方主机上。为了避免版本号混淆,下一个官方版本直接跳到了 2.1.314。
至于是谁干的、怎么拿到发布权限的,目前没有答案。Anthropic 方面的 Felix Rieseberg 称这不是 Anthropic 系统或员工电脑被入侵,而是有人利用 Cursor 市场的访问权限发布了篡改版。Cursor 的公告则没有解释攻击者如何获得发布权限。Cursor 此前在 10 月开放了 Marketplace 公共提交,但这件事和本次投毒是否有关,官方没有说明,本文也不做推断。对开发者来说,与其猜根因,不如先检查自己的机器。
为什么官方 Claude Code 扩展也会被投毒
很多人的第一反应是:官方包名怎么会有毒?要回答这个问题,先要了解 IDE 扩展的运行方式。扩展以 IDE 的权限运行,能读写你的代码、环境变量和用户目录下的文件。而且它在被加载时就会执行代码,你不需要打开对话框,也不需要主动使用它。
Phorion 的分析显示,恶意代码是一段 66 行的立即执行函数(IIFE),插在 extension.js 文件的最前面,后面才是正常的扩展代码。扩展模块一被 Node 加载,这段代码就会运行,时间早于正常的 activate 回调。被篡改的 extension.js 大小为 3,692,922 字节,比前一个干净版本大约多 7 KB。它不依赖 npm 的 postinstall 钩子,所以这不是 npm 包投毒,而是 VSIX 安装包里的代码被直接修改。
可以用一个类比来理解:这不是有人把假药混进药店,而是官方货架上一盒正规品牌的药被换成了掺药版。名字、包装、条码都是真的,只有里面的药不对。所以这次事件里,以往「认准官方发布者」的经验不起作用。

图注:后门链路共六步,卸载扩展只能停掉第一步。
围绕这次事件,常见的误解有三个:
- 「官方包名就等于官方构建」:这次的包名、发布身份都是官方的,但构建不是 Anthropic 做的。Open VSX 上同样有一个 2.1.312,是 10 月 27 日发布的干净版。同一个版本号,来源不同,安全性也不同。
- 「只有 2.1.313 有问题」:Cursor 市场里的 2.1.312 也是恶意的。
- 「卸载或升级就没事了」:Cursor 公告原话是,仅卸载扩展可能不够,因为 payload 会留下独立运行的持久化脚本。
Claude Code 扩展后门 5 步自查与清除
下面 5 步按顺序做。前三步是检查,第四步是清理,第五步是收尾。每一步都写明要做什么,以及怎么判断这一步算完成。

图注:5 步流程,第五步凭据轮换不能省略。
① 查扩展版本与来源。 打开 Cursor 的扩展面板,搜索 Claude Code,看版本号和发布者。然后在终端里查看 ~/.cursor/extensions/ 目录(Windows 下是 %USERPROFILE%\.cursor\extensions\),看有没有名称里带 anthropic.claude-code-2.1.312 或 2.1.313 的文件夹。即使你现在已经是新版本,旧版本目录残留也说明你可能在窗口期内装过。
② 查 svc-telemetry 公钥。 macOS 和 Linux 下运行 grep -n svc-telemetry ~/.ssh/authorized_keys。Windows 下要同时检查 %USERPROFILE%\.ssh\authorized_keys 和 C:\ProgramData\ssh\administrators_authorized_keys 两个文件。恶意代码判断的是文件里有没有 svc-telemetry 这个字符串,所以只看注释不够保险。建议再运行 ssh-keygen -lf ~/.ssh/authorized_keys 列出所有公钥指纹,与攻击者指纹 SHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk 逐一比对。
③ 查持久化与隧道进程。 不同系统检查的位置不同:
- macOS:
~/Library/LaunchAgents/com.apple.sysmond.plist、~/.config/.smt、~/.config/.smtk,以及临时目录下的.stk_*文件。这个 LaunchAgent 名字伪装成 Apple 系统组件,实际上是用户级启动项。 - Windows:运行
schtasks /query /tn SysMon查计划任务;检查启动文件夹下的sysmon.cmd,以及%USERPROFILE%\.config\smt.cmd、%TEMP%\.stk_*。 - Linux:运行
crontab -l,查找带@reboot且指向~/.config/.smt的条目。 - 所有平台:检查是否有
ssh或autossh进程的参数里带-R '*:0:localhost:22'。
| 步骤 | 做什么 | 验收标准 |
|---|---|---|
| ① 扩展来源 | 查扩展面板与 ~/.cursor/extensions/ |
无 2.1.312 / 2.1.313 目录,当前版本 ≥ 2.1.314 |
| ② 公钥 | 搜索 svc-telemetry 并比对指纹 |
两类 authorized_keys 中都没有匹配项 |
| ③ 持久化 | 查 plist / SysMon / cron / 隧道进程 | 文件不存在,没有带 -R 参数的 ssh 进程 |
| ④ 清除 | 运行 Cursor 官方脚本并升级 | 脚本以 0 状态退出,再复查①②③均为空 |
| ⑤ 凭据 | 轮换 Git、CI、云、SSH、API Key | 旧凭据已停用,调用日志无异常 |
④ 中招就运行官方脚本清除。 只要②或③中有任何一项命中,就按 Cursor 公告处理。macOS 用户下载 cursor.com/static/security/claude-code-extension/remediate-macos.sh,以受影响用户身份(不要用 root)运行 bash remediate-macos.sh。Windows 用户下载 remediate-windows.ps1,用「以管理员身份运行」打开 PowerShell,执行 powershell -ExecutionPolicy Bypass -File .\remediate-windows.ps1。脚本只从 Cursor 官网获取,不要用来路不明的「一键清除」工具。脚本会移除恶意扩展、持久化机制、隧道进程和攻击者公钥;如果还有残留,会以非 0 状态退出。清理后把扩展升级到 2.1.314 以上,截至 10 月 31 日可以直接装 2.1.316。
⑤ 轮换凭据。 需要轮换的包括 GitHub / GitLab token、CI/CD token、云厂商 Access Key、SSH 私钥、npm / PyPI token,以及你配置在这台机器上的 API易 apiyi.com Key。轮换操作要在一台可信的机器上进行。如果 SSH 日志显示隧道确实被使用过,Phorion 的建议是重建主机,这比逐项清理更安全。
为什么大多数人没被登录,但 Claude Code 后门你还是得查
先说相对好的消息。根据 Phorion 的分析,恶意代码自身有 bug,导致大多数主机上的 SSH 服务没有被成功打开。
在 macOS 上,脚本用普通用户权限运行 systemsetup -getremotelogin,得到的是「需要管理员权限」的提示,而且退出码仍然是 0。脚本只检查输出里有没有 Off,这段提示里没有,于是它误以为远程登录已经开启,跳过了开启 SSH 的步骤。在 Windows 上,安装 OpenSSH Server 的 PowerShell 命令被交给了一个写死 /bin/sh 的辅助函数,而标准 Windows 没有 /bin/sh,这一步大概率失败。Cursor 也称,除非 Cursor 是以管理员权限启动的(这种情况很少见),否则开启 SSH 服务和建立隧道这一步会失败。
但这不等于没事。公钥、持久化脚本和侦察信标都已经落地了。还是用类比来说:坏人的开锁工具做坏了,所以很多门没被打开;但钥匙已经插在锁孔里,而且每 60 秒会再试一次。
| 类别 | 指标(IOC,已做 defang 处理) | 说明 |
|---|---|---|
| 网络 | 134[.]209[.]82[.]225:22,用户名 tunnel |
反向 SSH 隧道目标 |
| 网络 | 134[.]209[.]82[.]225:8099/beacon |
明文 HTTP 信标,回传主机信息 |
| 公钥 | 注释 svc-telemetry |
写入 authorized_keys |
| 指纹 | SHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk |
攻击者公钥指纹 |
| 隧道私钥 | SHA256:KOAU57+ZG6u3MG4WwzPzPX2O5YEe9qdOC1Bl+6MVyDQ |
写入临时目录的 .stk_* 文件 |
| 文件 | extension.js SHA-256 以 ecb58cb2 开头 |
恶意扩展主文件,完整值见 Cursor 公告 |
图注:恶意 VSIX 哈希表截图(编辑阶段补截图)。
以下几种情况要特别注意:
- Remote Login 原本就开着。 如果你的 Mac 在「系统设置 → 通用 → 共享」中开启过远程登录,或者 Windows 上
Get-Service sshd显示服务在运行,那么后门具备可用条件。 - 服务器下线不等于机器干净。 攻击者服务器目前失效了,但持久化脚本仍会不停重试连接。如果不清理,这台机器始终处在不安全的状态。
- 查 SSH 登录日志。 macOS 可以运行
log show --predicate 'process == "sshd"' --last 7d,Linux 查/var/log/auth.log,Windows 查事件查看器中的 OpenSSH/Operational 日志。重点找来自127.0.0.1或::1、使用 svc-telemetry 公钥认证成功的记录。只要出现一条,就按「已被登录」处理,并考虑重建主机。
恶意代码还收集了主机名、用户名、系统信息、工作目录、Git 全局邮箱、公网 IP,以及最多 40 个环境变量的名字。Phorion 的结论很明确:bug 降低了被登录的概率,但不能把它当成防线。
Claude Code 扩展被投毒后,API易 Key 要不要换
要换。 恶意代码收集的是名字匹配 KEY、TOKEN、SECRET、PASS、AWS、GCP 的环境变量名,虽然没有直接读取变量的值,但攻击者已经知道你的机器上有哪些凭据。一旦隧道可用,攻击者就能交互式读取环境变量的值、配置文件和 shell 历史。所以只要这台机器在窗口期内装过 2.1.312 或 2.1.313,配置在上面的 API易 apiyi.com Key 就应当按「可能已暴露」处理。
先说清楚一点:这不是 API易 被入侵,而是你本机上的 Key 存在被读取的间接风险。所以要做的是轮换 Key,不需要恐慌。具体步骤如下:
| 步骤 | 操作 | 验收 |
|---|---|---|
| 1 | 打开控制台令牌页 api.apiyi.com/token |
能看到现有 Key 列表 |
| 2 | 点右上角「新增」,给 Claude Code 用的 Key 选择分组 ClaudeCode |
生成以 sk- 开头的新 Key |
| 3 | 把 ANTHROPIC_AUTH_TOKEN 改为新 Key,ANTHROPIC_BASE_URL 保持 https://api.apiyi.com |
~/.claude/settings.json 中的 env 也同步修改 |
| 4 | 重开终端,重启 Claude Code | 能正常对话和调用 |
| 5 | 回到令牌页停用或删除旧 Key | 旧 Key 状态变为禁用 |
| 6 | 查看调用日志 | 没有异常模型、异常时间段的消耗 |
如果你的脚本走的是 OpenAI 兼容接口,记得把代码里 base_url="https://api.apiyi.com/v1" 对应的 Key 也一起换掉,换完后用新 Key 发一条测试请求确认可用。旧 Key 如果还在别的机器或项目里使用,要逐台替换,不要只改一台。
🎯 最佳实践:API易 apiyi.com 的令牌页支持给每个 Key 设置余额上限和有效期。建议按「一台机器一个 Key」「开发和生产分开」的方式管理,下次出现类似事件时,只需要停用对应的那一个 Key。
另外要再强调一次:需要轮换的不只是 API易 的 Key。GitHub / GitLab token、CI 密钥、云厂商 Access Key、SSH 私钥、npm / PyPI token 都应该一起轮换,并且在可信的机器上操作。
Claude Code 扩展被投毒常见问题 FAQ
Q1:我只用 VS Code 官方市场,会受影响吗?
目前没有证据表明会。可核实的分发源只有 Cursor Marketplace,微软市场和 Open VSX 上都没有恶意的 2.1.313。
Q2:我只用 Claude Code CLI,没用 IDE 扩展,会受影响吗?
不会因为这次事件受影响。npm 上的 CLI 包没有被投毒,受影响的只是 Cursor 市场里的扩展 VSIX。
Q3:我用 Cursor,但没装 Claude Code 扩展,会受影响吗?
不会。恶意代码只在这个扩展被加载时执行。如果不确定,可以按第 ② 步搜索一遍 `svc-telemetry`,几秒钟就能确认。
Q4:升级到 2.1.314 就安全了吗?
升级只能防止以后再中招。已经写入的公钥、持久化脚本和泄露出去的信息不会因为升级而消失,仍然需要按第 ②③④⑤ 步处理。
Q5:现在应该装 2.1.316 吗?
可以。截至 10 月 31 日,2.1.316 是 GitHub Releases 上的最新版,2.1.314 和 2.1.316 都是干净版本。中间没有 2.1.315,这是正常的。
Q6:需要重装系统吗?
如果只命中了公钥或持久化,运行官方脚本并完成复查通常就够了。如果 SSH 日志显示隧道确实被使用过,Phorion 建议重建主机,因为攻击者登录后做过什么,无法从样本中推断出来。
Q7:5,000 人是确诊中招的人数吗?
不是。Cursor 称「最多 5,000 名用户」,这是下载和自动更新的暴露估计,不是确认的感染数。Cursor 表示会直接联系受影响的用户。
Q8:我的电脑会被远程控制吗?
由于前面提到的 bug,大多数 macOS 和 Windows 主机的 SSH 服务没有被打开,攻击者服务器目前也已下线。但如果你的远程登录功能本来就开着,风险是真实存在的。是否被登录过,请以 SSH 日志为准。
Q9:API易 Key 会泄露吗?
API易 平台本身没有被入侵。风险在于你本机的环境变量可能被读取,所以建议在 api.apiyi.com/token 新建 Key、替换配置,然后停用旧 Key。
Claude Code 扩展投毒核心要点 Key Takeaways
- 受影响版本:Cursor 市场里的 2.1.312 和 2.1.313,官方其他渠道未受影响。
- 加载即执行:不需要使用扩展,只要被加载就会植入后门。
- 三样残留:authorized_keys 中的公钥、持久化脚本、beacon 回传的信息。
- 大多数人未被登录:原因是恶意代码有 bug,但这不能作为不排查的理由。
- 清除方式:运行官方脚本,升级到 2.1.314 以上,必要时重建主机。
- 凭据收尾:轮换 Git、CI、云、SSH 凭据和 API易 Key。
参考资料
- Cursor 安全公告:受影响版本、IOC 和清除脚本
- 链接:
cursor.com/blog/claude-code-extension-security-notice - Phorion 技术分析:恶意代码与 bug 分析
- 链接:
phorion.io/blog/offical-claude-code-vsx-compromise - StepSecurity 分析:注册表与版本核对
- 链接:
stepsecurity.io/blog/claude-code-extension-trojanized - Claude Code GitHub Releases:官方版本记录
- 链接:
github.com/anthropics/claude-code/releases
总结
这次事件的特殊之处在于,恶意版本用的是官方包名,所以按「认准官方发布者」来判断并不管用。建议的处理顺序是:先查扩展版本和来源,再查公钥和持久化,命中就运行官方脚本,最后在可信的机器上统一轮换凭据。API易 用户可以借这次机会,按「一机一 Key」的方式重新整理 Key 的分组、额度和有效期,需要配置说明时可以查阅 API易 apiyi.com 的令牌管理文档。
作者:APIYI 技术团队
技术交流:欢迎在 API易 官网首页联系我们,Claude Code 接入配置可查阅 docs.apiyi.com 文档中心
这次不是换个版本就完事,真正要收尾的是 key、持久化和凭据。
