NPM供应链攻击揭秘:凭证窃取与自我传播的生态安全挑战

2025年9月披露的npm供应链攻击事件涉及500多个软件包,恶意软件Shai-Hulud通过凭证窃取和自动化传播技术感染系统,暴露了软件开发生态系统的安全脆弱性。

概述

软件供应链安全公司Socket于2025年9月15日披露了一起重大的npm供应链攻击事件。截至本文撰写时,已有超过500个软件包受到影响,且数量持续增加。此次攻击涉及名为Shai-Hulud的自我传播恶意软件变种,通过凭证窃取和自动化软件包发布进行传播。该攻击活动迅速升级,包括 CrowdStrike 发布的软件包也遭到入侵。

本文旨在提高对npm生态系统中软件开发和打包实践日益增长风险的认识,这些风险可能导致大规模入侵事件。该事件凸显了对已知攻击向量的持续利用,包括凭证窃取、软件包冒充和自动化传播,所有这些都破坏了像npm这样广泛使用的软件包生态系统的完整性。

描述

npm是Node.js的默认软件包管理器。它提供了一个全局注册表和命令行界面,帮助开发者安装、管理和共享JavaScript软件包及依赖项。通过使用package.json和package-lock.json文件,它简化了第三方代码的集成,确保依赖项的一致性和可重现性。

此次入侵很可能始于凭证收集活动,其中postinstall脚本导致恶意bundle.js文件的执行。postinstall脚本是npm的一项功能,允许在软件包安装后执行代码。bundle.js脚本扫描目标环境中代码和配置文件中的暴露密钥。该文件下载并使用通常用于合法密钥扫描的TruffleHog工具,收集存储为环境变量的凭证或GitHub Actions、GitLab CI、Jenkins等持续集成和持续交付(CI/CD)平台使用的密钥。恶意软件使用被盗凭证自我传播,将自身发布到其他代码库和软件包注册表, effectively将受感染环境转变为新的感染媒介。

传播的一个关键机制是CI/CD工具的自动"木马化",这是一个已知的攻击向量,对整个生态系统具有广泛影响。GitHub Actions是被滥用的功能之一,此前在2025年8月的Nx软件包攻击等事件中也有出现。攻击的另一个已知因素是滥用npm中的postinstall脚本功能。此技术在先前的事件中已被利用,例如2018年的event-stream攻击。npm中这些易受攻击的软件开发和设计方法在此次组合攻击中被充分滥用。

影响

截至发布时,已有超过500个软件包被确认受到Shai-Hulud恶意软件的入侵。Socket在其网站上维护着受影响软件包的实时列表。使用CrowdStrike产品的组织也应检查其npm软件包依赖项,因为据称用于管理和发布CrowdStrike软件包的npm账户已遭到入侵。

解决方案

GitHub已发布公开公告,详细说明对其软件包系统进行的额外安全更改。CISA也发布了安全公告。

对于npm用户

  • 审计和替换受感染的软件包:删除任何受影响的软件包版本,并用已知的安全版本替换。
  • 锁定依赖项:使用package-lock.json或npm i –package-lock-only锁定已解析的依赖项版本而不执行安装脚本,从而允许安全审计。对于将要重新分发的软件包(本地或其他方式),使用npm shrinkwrap锁定所有直接和传递依赖项版本以实现可重现的安装。
  • 使用内部镜像:使用Verdaccio或Artifactory等工具设置内部npm注册表,并在允许内部使用之前集中批准软件包。
  • 禁用postinstall脚本:在可行的情况下使用npm install –ignore-scripts,以防止在软件包安装期间执行恶意代码。

对于npm开发者

  • 轮换所有暴露的凭证:立即撤销和轮换任何可能已暴露的CI/CD相关令牌或密钥(GitHub、GitLab、Jenkins等)。
  • 强制执行最小权限:使用具有最小权限的范围限定令牌,并隔离构建环境,以确保不受信任的代码永远无法访问发布凭证,尤其是在使用GitHub Actions或类似CI/CD平台时。

致谢

本文由Christopher Cullen撰写。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计