技术热点透视20261102:编程扩展被投毒,卸载也删不掉 SSH 后门
原创 · 约 27 分钟阅读 · 阅读 --

技术热点透视20261102:编程扩展被投毒,卸载也删不掉 SSH 后门

作者: Alex Xiang


本文完全由 WorkBuddy 独立收集资料、调试代码并完成文章写作。

扫码注册 WorkBuddy 即可获取 2000 积分

我是 Alex Xiang,前百度/微博工程师,现在专注于 AI 工程与工具产品。更多文章欢迎关注微信公众号「字与码」。

66 行。7,386 字节。占整个 3.6MB 扩展包的 0.2%。

10 月 29 日,太平洋时间凌晨 2 点 27 分到下午 1 点 35 分,这 66 行待在 Cursor 的扩展市场里,挂的是合法扩展 ID anthropic.claude-code,版本号 2.1.312 和 2.1.313。下架之后,Cursor 说最多 5,000 名开发者可能装过,并注明这是上界。

这不是 Anthropic 被攻破。攻击者把改过的包传进了 Cursor 的市场,用别人家的 ID 发自己的货;Anthropic 在 10 月 30 日放出了干净的 2.1.314。

容易被读成「又一个供应链事故」。更值得记的是:一个 AI 编程扩展的权限,早就等于一把本地 shell——能读 ~/.ssh、.env、git 配置;而它的分发链,还停在浏览器插件时代的信任模型上:扩展 ID 加发布者名字,就是全部的信任锚。

  • 文本水印从「可选」变成默认:xAI 11 月 7 日起给七个 Grok API 模型默认打水印,连 tool-call 参数一起算;Anthropic 11 月 3 日给四个旧模型补上。
  • ChatGPT 和 Codex 开始抢同一个额度:12 月起 Plus、Pro、Business 的配额合并成一份 token 池,即时聊天不占。
  • 能跑本地 agent 的笔记本开卖了:六家 OEM 的 RTX Spark,128GB 统一内存、1 PFLOPS FP4,起价 2,599 美元。
  • 国行 Apple 智能定了日子:11 月 4 日进开发者 Beta,12 月随 iOS 27.3 上线,千问以「扩展」形式接进 Siri 和写作工具。

一个市场、两个版本、十一小时

Cursor 的安全通告写得很具体:窗口 10 月 29 日 2:27 到 13:35(太平洋时间,对应 UTC 09:27–20:35),受影响的是 macOS 和 Windows 上装在 Cursor 里的 Claude Code 扩展。

第一版通告只点了 2.1.313,10 月 30 日修订时补上 2.1.312(Phorion 的更新记在 10 月 31 日 00:43 UTC)。两个版本都中招,不是一个。

窗口能拖到 11 小时,有个产品设置帮了忙:Cursor 默认开着扩展自动更新。开发者不用点任何东西,编辑器下次启动就去拿新版本——本来是省事的设计,在投毒场景里变成了自动分发。

Cursor 的处置是整个市场下线、轮换密钥、重建、再开,并通过托管商关掉攻击者的服务器。官方判断是 Anthropic 的系统没被侵入。

「谁给了攻击者发布权限」这一条至今没有解释。这是整件事里唯一没法靠读代码补上的空白。

浏览器开发者工具里的页面源码

StepSecurity 的静态分析结论:投毒包和干净包的差别,就是 extension.js 最前面多了 7,386 字节。3,692,922 = 3,685,536 + 7,386,其余 3.6MB 逐字节一致,没有第二个后门。图:Pexels。

后门做了四件事

StepSecurity 11 月 1 日放出的静态分析把它拆得很干净:一个 66 行、约 7,386 字节的立即执行函数,插在合法 extension.js 的最前面。

位置比内容更狠:它跑在模块加载时,早于 activate() 回调——编辑器把扩展加载了,代码就执行了,不需要打开侧边栏,也不需要发一句话。

四件事依次是:

第一,装钥匙。把一把攻击者控制的 Ed25519 公钥追加进 ~/.ssh/authorized_keys,注释写着 svc-telemetry,看起来像遥测服务账号。

第二,开门。尝试把本机的 SSH 服务打开。

第三,打隧道。连到 134.209.82.225,以 tunnel 用户、22 端口建反向隧道,把对面一个动态端口转发回本机 22 端口;重连脚本大约每 60 秒试一次。

第四,留后手。macOS 装一个伪装成 com.apple.sysmond 的 LaunchAgent;Windows 建一个叫 SysMon 的计划任务(以 SYSTEM 运行),失败就退到启动文件夹;Linux 写一条 crontab @reboot。

顺手还发了一次信标:POST 到同一台服务器的 8099 端口,内容是公网 IP、主机名、用户名、系统与架构、工作目录、git 全局邮箱,以及最多 40 个「看起来像凭据」的环境变量名——只有名字,没有值。

只拿变量名,说明这一版载荷的目标不是立刻偷东西,是先画一张图:哪台机器上有 AWS_、TOKEN、SECRET,再决定下一步连谁。

交换机上编号 13 到 24 的端口

反向隧道把对面一个动态端口转回本机 22 端口,攻击者用预置的公钥登进来就是交互式 shell。脚本每 60 秒重试,关掉 IDE 也不停。图:Pexels。

拦住它的不是防御,是一行写错的权限检查

绝大多数人这次没被连上,原因很朴素:后门自己写错了。

macOS 上它用 systemsetup -getremotelogin 查远程登录状态。没有管理员权限时,这条命令输出一段拒绝访问的报错,但退出码是 0;后面的逻辑只在输出含「Off」时才继续开服务。报错文本里没有「Off」,这一步就被跳过了。

Windows 上装 OpenSSH Server 的那条 PowerShell 命令,被塞进 /bin/sh 里执行——标准 Windows 上没有这个 shell。

Phorion 的分析特意提醒:别把这当成防护。如果那台 Mac 本来就开着远程登录,或者事后有人打开了,预置的公钥立刻可用。

也就是说,11 小时里没出事,靠的是一个写错的判断条件,而不是签名校验、权限隔离或任何一层设计好的防线。

这也解释了为什么「看 diff」在这一类事故里基本无效。3.6MB 的 bundle 多 7,386 字节,占 0.2%;打包产物本来就是压缩过的代码,没有 source map,人和工具都很难一眼看出哪 66 行是新的。

真正缺的是流程。发布者身份校验、包体签名与可复现构建、更新通道的二次确认,这三件事在 AI 编程工具上都还没变成默认项——而它们的权限比浏览器插件大得多。

有条推论可以自己验证:问一句「我们团队装了哪些 Cursor 扩展、各是什么版本」,十分钟内能报出来的团队有多少。这次最贵的一步不是清理,是拉清单。

三个还没答案的问题

5,000 是上界,不是实测。 Cursor 的原话是「最多」,真实装机量没公布。11 小时里有多少台机器执行了载荷、多少条隧道真的连上过,没有一方给数字。所有关于影响面的讨论,都建立在一个上限值上。

Open VSX 到底有没有。 BleepingComputer 和 The Hacker News 说只有 Cursor 的市场;Help Net Security 和 StepSecurity 说 Open VSX 上也有。StepSecurity 检查了 Open VSX 上的 2.1.312,是干净的。两边可能都没错,但结论差很远——用基于 Open VSX 的编辑器(比如 Windsurf)的人,此刻不知道自己该不该查。

发布权限是怎么拿到的。 攻击者用的是合法 ID、合法版本号序列、正常市场通道。这条链路哪一环被绕过,官方没讲;没讲清楚,下一家市场可能也挡不住同一招。

今天该查的四件事

一,grep svc-telemetry ~/.ssh/authorized_keys。有这一行就算中招,别先删了再说。

二,看持久化:macOS 查 ~/Library/LaunchAgents/com.apple.sysmond.plist,Windows 查计划任务 SysMon 和 C:\ProgramData\ssh\administrators_authorized_keys,Linux 查 crontab -l 里的 @reboot。

三,卸载不等于清除。载荷留下的脚本还在跑,Cursor 给了 remediate-macos.sh 和 remediate-windows.ps1;如果隧道连上过,重装系统比清理省心。

四,在干净机器上轮换这台机器能碰到的所有凭据:git 托管、CI/CD、云账号、包仓库、SSH key。然后把扩展自动更新关掉——它不是「自动打补丁」,是「自动执行陌生代码」。

其他动态

文本水印从「研究」变成默认值

xAI 的开发文档 10 月 31 日更新:11 月 7 日起,七个 Grok API 模型默认给输出打水印——grok-4.7、4.6、4.5、4.3,以及 grok-4.20 的 reasoning、non-reasoning、multi-agent 三个版本。覆盖 Responses 与 Chat Completions 两个接口,普通回复、结构化输出、tool-call 参数都算。开发者不用改参数,带水印的响应返回 x-watermark: true。

水印不改字符,是在生成时轻微影响 token 的选择,留下统计上可检测的偏好。管理员可以按模型关掉,但要先声明「适用法律存在例外」,改动进审计日志;部分模型锁死不能关。

Anthropic 走得更早:8 月 2 日之后发布的 Claude 模型上线即带,覆盖 API、应用、Claude Code,跑在 AWS、Google Cloud、Microsoft Foundry 上也一样。据 The Decoder 报道,11 月 3 日起给 Mythos 5、Opus 4.7、Opus 4.6、Sonnet 4.6 补上——其中 Opus 4.6 和 Sonnet 4.6 只在 temperature、top_p、top_k 全是默认值时才生效。

时间点都指向同一条法规:欧盟 AI Act 第 50 条,2026 年 8 月 2 日起适用,此前已上市的系统宽限到 12 月 2 日。

值得关注的原因:三家三种答案——xAI 默认开、可申请豁免;Anthropic 全球开、没开关;OpenAI 只在欧盟的 ChatGPT 里开,API 默认关。检测器都不公开,xAI 要申请,Anthropic 只给监管、媒体和研究者:合规要求的「可检测」,对普通开发者仍是一句承诺。效果也没那么结实——OpenAI 自己的测试里,10% 的词换成同义词,检出率从约 92% 掉到 66%。而把水印塞进 tool-call 参数这件事,官方只说「不影响质量与速度」,没给测试数据。

ChatGPT 和 Codex 开始抢同一个额度

10 月 31 日,OpenAI 更新支持文档:12 月起,ChatGPT Plus、Pro、Business 的额度在 ChatGPT 和 Codex 之间共享,不再分开算,统一按 token 计量。即时聊天(Instant)不占这份额度。

额度耗尽后三条路:等重置、升级套餐、买点数。剩余额度和下次重置时间在「设置—使用量」里看。各档给多少 token、不同模型怎么折算,官方没公布。

值得关注的原因:订阅制的计价单位换了。以前是「几小时内能发多少条」,粗但可预期;现在是一个 token 池,而 agent 的多步动作——读文件、跑测试、改回来再来一遍——每一步都在池子里扣。同一份月费,写代码的人和聊天的人消耗曲线完全不同。这也把「agent 值不值这个价」从体感变成了能查余额的数字。

一台能跑本地 agent 的笔记本,起价 2,599 美元

英伟达 10 月 28 日的更新说,RTX Spark 笔记本已在华硕、戴尔、惠普、联想、微软、微星六家开卖,128GB 配置已经上架。规格是 Blackwell RTX GPU 与 Grace CPU 封进一颗 superchip,最高 128GB 统一内存、最高 1 PFLOPS FP4,起价 2,599 美元(有媒体写 2,399,口径不一)。

同一批更新里还有一个小开关:NVIDIA App 可以把 GPU 资源在前台应用和后台 agent 之间分配,前提是 Windows 开了硬件加速 GPU 调度。

桌面上的黑色笔记本电脑

RTX Spark 是把 Blackwell GPU 与 Grace CPU 封进一颗 superchip 的笔记本,最高 128GB 统一内存。图为示意,非 RTX Spark 机型。图:Pexels。

值得关注的原因:这是「agent 常驻」第一次落到消费级硬件的产品化痕迹——显卡驱动里出现了「给后台 agent 留多少算力」这个选项,说明厂商认定它是常态负载。128GB 统一内存的意义也在这:不是跑得动更大的模型,是模型和上下文能待在同一个内存池里。代价是 2,599 美元起,买的是「不把代码发出去」,这笔账只有一部分团队算得过来。

国行 Apple 智能的模板:端上自研,云端外挂

10 月 31 日,苹果中国官网宣布 Apple 智能即将在国行上线:首批功能 11 月 4 日随 iOS 开发者 Beta 开放测试,12 月随 iOS 27.3 正式推送,接入的是阿里千问。

分工写得比以往清楚:翻译、写作工具、照片消除、通知摘要这些基础功能,由苹果自研模型在设备端处理;复杂文本理解、图像识别、内容生成由千问在云端支持。千问是「扩展」不是底座,可以在 Siri、写作工具、视觉智能里被调用,开不开由用户定,请求与回复不用于训练。边界也明确:仅 iPhone,不含 Siri AI 和 WWDC 2026 的下一代功能。

手里握着的手机

这次上线的是 2024 年以来海外陆续推过的那批基础功能:写作工具、照片消除、通知摘要、智绘表情。代表苹果 AI 最新形态的 Siri AI 不在这批里。图:Pexels。

值得关注的原因:这是国行系统级 AI 的一个可复制模板——端上自研模型守合规底线,云端第三方模型以「可选扩展」补能力,数据流向由用户逐次授权。对苹果是补短板,国内安卓旗舰早把 AI 当标配;对千问是拿到系统级入口。真正的考验在 12 月:两套模型拼在一起,接缝处体验是否一致。

顺带一提

  • DeepSeek 从 11 月 1 日北京时间 0 点起,Search 与 Fetch 按每千次成功请求 0.75 美元计费。此前通过 DeepSeek Harness、Claude Code 或 Codex 走的服务端工具调用是免费的——agent 的「联网」这一层,开始单独进账单。
  • 美国司法部在审英伟达收购 Hugging Face,金额约 129 亿至 130 亿美元,预计 2027 年上半年交割。争点不是价格,是谁握着开源模型的集散地。
  • OpenAI 本轮融资目标从 3,000 亿美元下调到 2,000 亿,估值 1.25 万亿,已拿到 1,100 亿承诺,由阿布扎比主权基金领投。
  • Factory 的 Droid 1.0 把「脚本模式」设成默认:模型写一段 JavaScript 在沙箱里跑,一次响应执行几百个操作,替代一步一调用的 ReAct 循环。

参考资料

  • Cursor 安全通告:Malicious Claude Code extension in Cursor Marketplace,2026-10-30 修订
  • StepSecurity:Static analysis of the trojanized Claude Code extension,2026-11-01
  • Phorion:Technical analysis of anthropic.claude-code 2.1.312 / 2.1.313,2026-10-31
  • xAI 开发者文档:Output Watermarking(2026-10-31 更新);The Decoder 关于 Anthropic 水印邮件,2026-11-01
  • 欧盟 AI Act 第 50 条与第 111 条(Digital Omnibus 修订),欧盟委员会 AI Act Service Desk
  • OpenAI 支持文档:Understanding ChatGPT and Codex usage limits,2026-10-31;中新经纬、环球网报道
  • NVIDIA 官方博客:RTX Spark Windows Laptops Gain New Models, Agent Tools and Games,2026-10-28
  • 苹果中国官网新闻稿、新华社:Apple 智能与阿里千问合作,2026-10-31
打开原图 ↗