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)