一个 VS Code 插件挂了 18 分钟,3800 个 GitHub 内部仓库就没了——OpenAI 和 Mistral 全跟着遭殃

5 月 18 日中午 12 点 30 分到 12 点 48 分,UTC 时间——18 分钟。

Visual Studio Marketplace 上挂着一个被植入木马的 Nx Console 插件。Nx Console 这玩意儿不冷门,全网总下载量 220 万次,是 Nx 用户调试 monorepo 时几乎必装的扩展。

这 18 分钟里,一个 GitHub 内部员工电脑上的 VS Code 自动更新了这个插件。木马跑起来——抓走了开发者电脑上能找到的所有 credential:GitHub token、AWS key、SSH 私钥、Claude Code 配置。

48 小时后,3800 个 GitHub 内部仓库的源代码出现在暗网上挂牌出售。要价 5 万美金。

一条从 5 月 11 日就开始织的网

这事不是 18 分钟内突然冒出来的。攻击的源头要往前推一个星期。

5 月 11 日——一个叫 TeamPCP(安全圈也叫它 UNC6780)的犯罪团伙拿下了 TanStack 的整个 router 生态。TanStack 是 React 圈里写路由必用的工具,他们的 npm 包加 PyPI 包,一次性 172 个全被植入恶意代码。

这种规模的供应链攻击有个特点——它会自己传播。任何用了 TanStack 的项目,构建一次就把恶意代码拉进来;任何用了那些项目的下游开发者,再构建一次又传出去。安全圈给这个 worm 起了个名字:Mini Shai-Hulud。

5 月 18 日——Nx Console 的开发流程里也用了 TanStack。被污染的依赖混进了 Nx Console 的发布版本里,挂上 Visual Studio Marketplace。被发现并下架花了 18 分钟。

够了。

5 月 19 日下午——TeamPCP 在 PyPI 上又发了三个版本的 durabletask(1.4.1、1.4.2、1.4.3),35 分钟之内全推完。durabletask 这个包月下载量 41.7 万次,被广泛用在企业级 Python 异步任务里。

5 月 20 日凌晨 12 点 43 分 UTC——暗网论坛上出现帖子,挂牌出售 4000 个 GitHub 私有仓库,要价 5 万美金。

5 月 20 日凌晨 5 点 04 分 UTC——GitHub 正式承认遭遇了供应链攻击,源头是员工电脑上的一个被污染 VS Code 插件。

中间还有个尴尬细节:threat actor 在 X(推特)上喊话说”GitHub 早就知道这事了,拖了几小时才披露”。

谁中招了

GitHub 是这一波公开承认的最大受害方。3800 个内部仓库被偷,里面包括:

  • MCP(Model Context Protocol)的内部实现
  • OAuth 基础设施代码
  • 安全研究团队的内部工具
  • Developer Success 平台

OpenAI 这次又中了。两台员工电脑被攻陷,部分内部源码仓库的 credential 被外泄。这是 OpenAI 今年第二次被供应链攻击波及——上一次是 TanStack 那一波。

Mistral AI 也跟着倒霉。他们的 npm 和 PyPI SDK 同样被植了木马,TeamPCP 已经把 Mistral 的源代码贴到犯罪论坛上挂牌出售。还有据传的 2.5 万美金门罗币赎金要求,Mistral 这边没接茬。

欧盟委员会的开发环境也被波及。

这名单可能还会变长。phoenix.security 的复盘报告里讲,这是 TeamPCP 三个月内的第五波攻击——3 月到 5 月一共五次大动作,没有一个 CVE 编号。所有传统的 CVE-based 扫描器都看不到这玩意儿。

TeamPCP 是什么来头

要看清这个团伙的玩法,得先看他们已经端掉了哪些目标:

时间 目标 性质
3 月 Aqua Trivy、Checkmarx KICS 安全扫描工具
3 月 LiteLLM AI 工具基础设施
4 月 Telnyx SDK 通信 API
5 月 11 日 TanStack 全家桶 前端路由
5 月 18-20 日 Nx Console + GitHub + durabletask 开发者工具 + 平台

发现规律没?全是开发者最信任的工具链——扫描器、SDK、IDE 插件、路由库。这些东西的特点是:开发者装上去之后基本不再 review,更新一次就跑一次。

TeamPCP 的 C2(指挥控制)基础设施一直在 83.142.209.0/24 这个子网段——五波攻击没换过 IP。安全圈一度奇怪:”这么大的活儿为什么不换 IP?”答案可能挺扎心:没换也没被封,说明现在大半防御都不在网络层

操作员的推号叫 @xploitrsturtle2,最近的吹嘘是”shai-huturtle”——直接致敬 Shai-Hulud 蠕虫。

为什么这事对 AI 圈特别糟

普通的供应链攻击是冲数据和 credential 去的,AI 公司这一波多了一层风险——模型权重和训练数据本身

OpenAI 被偷走的内部仓库里大概率含 Codex、GPT 系列的训练脚本和 evaluation 工具。Mistral AI 的源代码已经在挂牌出售。任何潜在买家拿到这些代码,理论上可以:

  • 复刻部分训练流程
  • 发现安全过滤器的具体规则,绕过对应限制
  • 找出模型架构的潜在漏洞,做有针对性的 prompt 注入

第二阶段的 payload 还特意会扒 AI tooling 的配置文件——这是 TeamPCP 这波最有针对性的地方。他们知道开发者机器上有 Claude Code 配置、OpenAI API key、Cursor 的会话状态——这些 token 拿到手能直接调用对应 AI 服务,绕过任何”我”的概念。

现在该怎么办

如果你团队里有人在用 VS Code + Nx Console,过去一周内更新过插件,第一步是轮换所有 cloud credential。GitHub token、AWS key、Anthropic API key、OpenAI API key、Cursor 订阅 token 全要换。

其次,PyPI 上的 durabletask 1.4.1、1.4.2、1.4.3 三个版本全部回滚到 1.4.0 或更早。检查 CI/CD 流水线里有没有自动升级到这三个版本。

如果你公司在用 TanStack 系列(router、query、table),这些包从 5 月 11 日起的版本基本都要重新审计——这一波 worm 在 npm 和 PyPI 两个生态里都扎了根。

更长远的事——开发者电脑上的 IDE 插件这一层,安全控制几乎是空白。VS Code 装个插件可以读所有本地文件、所有环境变量、所有 SSH key,浏览器里装个扩展都比这严格。

Anthropic 之前买的那家代码安全公司 Socket,主打的就是用 AI 实时扫开源依赖里的供应链投毒。这一波之后,Socket 这类公司大概率会拿到一笔新订单。

但抢着喂数据给 AI 的另一面,是 AI 自己变成攻击者最香的入口。这两件事现在已经分不开了。

参考来源:GitHub Internal Repositories Breached via Malicious Nx Console VS Code Extension(The Hacker News);TeamPCP breached GitHub's internal codebase via poisoned VS Code extension(Help Net Security);TeamPCP Wave Four: GitHub Breach via Poisoned VS Code Extension(Phoenix Security);VS Code supply chain attack hits GitHub, OpenAI, and Mistral AI(Notebookcheck);500 Poisoned Packages, Hundreds of Companies: TeamPCP's Worm Just Reached GitHub(Tech Times)