以下是实际发生的事件,一步步的经过:5月18日,威胁行为者攻陷了Nrwl(Nx Console 背后的公司)在 VS Code 市场的发布帐户。当日12:36到12:47 UTC之间,他们使用合法的发布者凭据在市场上推送了包含恶意代码的 Nx Console 18.3.4 版本。被攻陷的版本使用 Nrwl 的有效发布证书进行加密签名,这就是为什么 VS Code 内置的验证系统没有给出警告的原因。在这11分钟窗口期间,任何开发人员的 VS Code 实例检查扩展更新时(或他们在此期间手动安装 Nx Console 时),他们直接从微软的官方市场下载了被毒化的版本。扩展未被黑客修改服务器上的文件,而是通过正门使用被盗的发布者凭据发布的。 攻击者最初是如何获得 Nrwl 的市场发布凭据的?这是大多数报道中缺少的部分。VS Code 的市场发布需要来自 Azure DevOps 的个人访问令牌(PAT)或绑定到 Microsoft 帐户的 OAuth 凭据。这些凭据几乎可以肯定是从先前的供应链妥协中窃取的,可能是从同一活动的早期阶段。这样就会形成级联失败模式:攻陷一个开发者工具来窃取凭据,使用这些凭据发布另一个开发者工具的恶意版本,再使用这个工具窃取更多凭据,周而复始。每次迭代都增加了攻击者在整个生态系统中访问发布者帐户的机会。Nx Console 的妥协不是零号病人,它已经在链条中处于深入阶段。 一旦中毒的扩展安装在开发者的机器上(包括本文中心的 GitHub 员工),它立即执行代码扫描整台机器的凭据。VS Code 的扩展是用 JavaScript 和 TypeScript 编写的,运行在 Node.js 内,这是支持 VS Code 的相同 JavaScript 运行时。当您安装一个扩展时,VS Code 会将其 JavaScript 代码直接加载到编辑器的进程空间中,具有对 Node.js API的完全访问权限。Nx Console 18.3.4 中的恶意代码使用 Node.js 文件系统 API(具体地说是 fs.readFile、fs.readdir 和路径遍历功能)递归扫描用户的主目录和常见的凭据存储位置。它搜索匹配模式的文件,如.npmrc,.aws/credentials,.kube/config,.ssh/,.gitconfig,.netrc,以及1Password CLI,HashiCorp Vault 和 Claude Code 的配置文件。扩展还调用 Node.js 子进程 API(child_process.exec 和 child_process.spawn)执行系统命令,以转储环境变量,查询 macOS 上的系统钥匙链(使用安全命令行工具),并从 Windows 凭据管理器中提取凭据(使用 cmdkey)。这一切都在纯 JavaScript 中进行,拥有与启动 VS Code 的用户相同的权限。这没有沙盒,没有权限提示,没有操作系统级隔离。VS Code 的扩展设计上就是受信任的代码。 窃取的凭据随后使用 Node.js 的内置 https 模块将数据 POST 到攻击者控制的域名。恶意代码使用 base64 编码和字符串连接对提取端点进行了模糊处理,以躲避静态分析,但一旦扩展执行,它就会直接发起 HTTPS 请求,发送包含找到的每个凭据的压缩 JSON 负载。扩展的 package.json 声明了激活事件,导致它在 VS Code 启动时立即运行(使用“*”激活事件,触发任何工作区打开时运行),这意味着开发人员不需要明确调用 Nx Console 功能以执行恶意代码。只需在已安装扩展的情况下运行 VS Code 即可。JavaScript 负载还在 VS Code 自己的凭据存储 API(使用 vscode.authentication 和 vscode.workspace API)中注入钩子,以拦截用户在工作会话期间访问的任何凭据,包括 VS Code 用于自身 Git 集成的 GitHub OAuth 令牌。 从那里,攻击者使用这些被盗的凭据在同一位员工的机器上安装了第二个被毒化的扩展(GitHub 尚未透露这是哪个扩展)。第二个扩展在接下来的几个小时或几天内窃取了大约3800个内部 GitHub 存储库。到5月20日,威胁团体 TeamPCP 已在黑客论坛上宣传出售这些被盗的存储库,价格从50000美元起,几小时后 GitHub 公布确认这次泄露。内部存储库并不是客户数据,对于基础设施安全来说更糟糕。这些存储库包含部署脚本,分阶段凭据,内部 API 架构和基础设施配置。级权限级别的源代码访问为攻击者提供了 GitHub 系统如何连接,认证和失败的蓝图。每一个抵达买家的秘密都缩短了该买家已在计划的攻击的侦查阶段。币安联合创始人 CZ 立即警告任何有私有存储库包含明文密钥的用户要轮换一切。Ivanti 的 CTO Mike Riemer 告诉我,Azure 的蜜罐网络现在显示已知漏洞在不到90秒就被利用,而被盗凭据甚至进一步压缩了时间轴。 GitHub 的漏洞并不是孤军深入。5月19日,Endor Labs 检测到42个恶意 npm 包(Socket 的更广泛跟踪发现了323个包的639个恶意版本)发布在阿里巴巴的 @antv 数据可视化生态系统内,每周下载大约1600万次。这个波浪引入了出处伪造:Mini Shai-Hulud 蠕虫现在在运行时调用 Fulcio 和 Rekor,为其传播的每个包装生成有效的 Sigstore 签名证书。来源工具显示一个绿色徽章。构建链属于攻击者。Endor Labs 的高级安全研究员 Peyton Kennedy 告诉我,“TanStack 在纸面上有正确的设置:OIDC 可信发布、签过的出处、对每个维护者账户的双重认证。攻击还是成功了。” 同样在5月19日,威胁行为者通过将所有现有标签重定向到包含恶意代码的冒充提交来攻陷 GitHub Actions 工作流 actions-cool/issues-helper,该代码从 CI/CD(持续集成/持续部署)流水线中提取凭据。提取域名与 @antv Mini Shai-Hulud 波相匹配,将集群联系在一起。几个小时后,Wiz 检测到 TeamPCP 已攻陷 durablerask,微软的官方耐久任务工作流执行框架的 Python 客户端。三个恶意版本在35分钟的窗口内被发布到 PyPI(Python 包索引),使用的是一个在之前 TeamPCP 操作中受损的 GitHub 帐户。负载从 AWS(亚马逊网络服务),Azure,GCP (谷歌云平台),Kubernetes 和超过90个开发工具配置中窃取凭据,然后通过云基础设施横向扩展。该包每月平均下载超过40万次。整个模式重复:攻陷一个受欢迎的工具,从每台运行它的机器中提取凭据,使用这些凭据攻陷下一个工具。TeamPCP 正在构建一个跨整个开发者生态系统的凭据数据库,并且他们正在出售访问权限给任何愿意支付的人。
GitHub 黑客事件完整报道:Nrwl 的 VSCode 扩展 Nx Console 泄露3800个秘密
GitHub 在5月20日确认,员工机器上的两个被毒化的 VS Code 扩展让攻击者访问了大约3800个内部存储库。首先,受到妥协的 Nx Console 版本(有220万次安装)在5月18日窃取了凭据。然后,一个未披露的扩展使用这些凭据提取了存储库。威胁组 TeamPCP 开价50000美元出售这次窃取的数据。这不是孤立事件:它伴随着供应链蠕虫一起到达,该蠕虫伪造了639个恶意 npm 包的有效加密签名,并入侵了微软自己的 PyPI 上的 Python SDK。
我的看法
48小时内七个供应链面临失败,而一个团体至少与其中三个事件有关。这不是一个关于一个坏 VS Code 扩展的故事。这是一个关于信任基础设施在从未设计来承受的对抗压力下崩溃的故事。当签署身份被盗时,出处徽章毫无意义。市场监管毫无意义,当监管者也是受害者时。开发者工具链中的每一个绿色复选标记都成了诱饵。 与以前的供应链恐慌相比,不同之处在于对手的操作节奏和他们开源的工具。TeamPCP 于5月12日发布了完全武装的 Mini Shai-Hulud 蠕虫代码。模仿者变种已经在流传。趋势科技自3月以来追踪了至少七个确认的波浪,每个波浪都针对下载更高的包,介绍了一个技术上更复杂的访问向量。蠕虫现在在运行时伪造其自己的加密来源。它同时通过 GitHub Actions、VS Code 扩展、npm 和 PyPI 传播。它跳过俄语语言的系统。Kennedy 告诉我,纸面上的正确设置已经不再能阻止这些攻击。企业依赖的合规框架是为人类编写的。代理身份不出现在任何熟知的控制目录中。坏人比防御行业更新其剧本的速度更快。
接下来会发生什么
每个在5月18日12:36至12:47 UTC 期间安装了 Nx Console 的开发者需要立即轮换他们机器上的每一个凭据。这不仅包括工作凭据,还包括个人 GitHub 令牌、AWS 密钥、SSH 密钥、密码管理器数据库,所有一切。大多数人不会这么做,因为大多数开发者不知道他们受到了影响。Nx 团队的11分钟响应时间意味着这次泄露不会出现在大多数安全审核日志中。没有预警铃响起,没有可疑的登录尝试触发监控,只是一个正常的扩展更新,其中恰好包含了一个凭据窃取器。被攻陷的 GitHub 员工将面临压力,要披露到底哪个扩展在第二次被毒化,以及他们何时这样做,每个使用该扩展的安全团队将要求一个完整的事故后总结。当这些凭据的第一个买家(不仅是这3800个存储库,而是 TeamPCP 从安装了被毒化扩展的每个人那里收集到的整个凭据数据库)使用分阶段凭据或内部 API 架构攻击一个尚未连接这些点的公司时,真正的多米诺效应就会爆发。同时,TeamPCP 开源的 Mini Shai-Hulud 蠕虫意味着我们将看到一批针对其他流行扩展和包的模仿攻击的剧烈增长。Kennedy 的检测启发将一直有效,直到下一个变种改变这些签名。没人定价的反事实情景:如果 Nx Console 的攻陷从几十个主要科技公司、云服务提供商和安全厂商的开发者那里窃取了凭据,而 GitHub 恰好是第一个泄露的受害者呢?在这种情况下,我们正在目睹一个更大竞选活动的开幕表演,而 TeamPCP 数据库中的凭据解锁了整个行业的基础设施。
历史告诉我们什么
2020年的 SolarWinds 供应链攻击通过毒化的软件更新攻陷了大约18000个客户,导致企业软件信任模型的根本性反思。发现这一攻击需要数月,并且涉及到一个具备丰富资源的国家级对手(归因于俄罗斯 SVR)。2026年的不同之处在于对手的操作节奏和侧写。TeamPCP 以财务动机为主,而不是国家资助,但他们执行供应链攻击的速度与几年前的国家级能力相媲美甚至超越。他们工具的开源代表了一个临界点的跨越:供应链攻击不再是 APT(高级持续威胁)小组的专属领域,不再依赖多年的操作时间表。现在能够被任何具备适中技术素养的威胁行为者执行,并且工具本身会传播。
市场影响
微软(MSFT,目前交易价格约425美元,过去一个月因科技行业整体疲软下跌约3%)面临声誉损失,这一漏洞完全存在于其自有生态系统内。GitHub 是微软的子公司,而 VS Code 是微软的产品,恶意扩展通过微软运营的市场到达。这给董事会层面带来了改革市场安全的压力,这可能意味着在扩展生态系统中增加摩擦,可能会导致功能速度变慢。这对 VS Code 在竞争对手 JetBrains 和其他 IDE(集成开发环境)上的竞争地位是一个中期拖累。更立即的是,随着企业在高调攻击后增加安全支出,CrowdStrike (CRWD,交易价格约285美元,月度上涨约8%)和 Palo Alto Networks(PANW,约345美元,本月上涨6%)将获益。预计两者短期内会出现看涨走势,因为采购团队加快了供应商评估。GitHub 漏洞特别验证了零信任架构供应商背后的理论,这3800个存储库中的每个凭据和令牌现在都必须被视为已被攻陷,这推动了假设攻击并在运行时执行最低权限访问的解决方案的需求。Cloudflare(NET,约95美元,本月相对持平)和 Okta(OKTA,约78美元,由于盈利能力问题下降4%)可能会看到对身份和访问管理解决方案的需求增加,这些解决方案可在凭据泄漏时限制爆炸半径。