Shai-Hulud 2.0: Inside The Second Coming, the Most Aggressive NPM Supply Chain Attack of 2025
攻击者如何渗透npm生态系统,Check Point研究人员发现了什么,以及组织如何保护其开发流水线。
Shai-Hulud 2.0 活动(其运营者称之为“第二次降临”)是近年来观察到的最广泛、发展最迅速的npm供应链攻击之一。在2025年11月21日至23日期间,攻击者在短短几小时内就攻陷了数百个npm软件包和超过25,000个GitHub代码仓库。与安装后激活的传统恶意软件不同,该活动滥用了npm的preinstall生命周期脚本,使得恶意载荷能在安装完成前、甚至在安装失败时运行。
查看CISA公告 此处.
Check Point研究人员分析了攻击者创建的大量仓库,并确认该活动导致大规模的多云和开发者凭证暴露。在大约审查的20,000个仓库中,以下凭证被验证为已暴露:
- 775个GitHub访问令牌
- 373个AWS凭证
- 300个GCP凭证
- 115个Azure凭证
虽然许多条目是由于在相同的CI/CD环境中多次执行而产生的重复项,但仍然存在大量有效且敏感的密钥,这说明了此事件的广泛影响。
攻击活动时间线
- 2025年9月:首次Shai-Hulud攻击出现,攻陷npm库并导致约5000万美元的加密货币被盗。
- 2025年11月21日至23日:新一波攻击开始。攻击者引入了扩展的载荷、新的传播方法和更广泛的自动化。
- 2025年11月24日:安全厂商开始发布警报,确认npm、CI和CD环境普遍受到危害。
Shai-Hulud攻击的工作原理
感染始于被劫持或恶意发布的受信任或仿冒npm软件包。一旦开发者安装受影响的软件包,恶意代码就会在preinstall步骤中执行,使攻击者能够早期访问开发或构建环境内部。
载荷包含两个主要组件:
setup_bun.js,用于安装Bun运行时bun_environment.js,用于执行核心恶意逻辑
使用Bun而非Node.js是一种故意的规避技术。大多数安全工具和沙箱都优化为跟踪Node.js行为,这使得Bun成为在常见检测路径之外操作的一种有吸引力的方式。
一旦执行,恶意软件会枚举环境变量、SSH密钥、GitHub令牌、npm令牌、CI/CD变量以及跨AWS、Azure和GCP的云凭证。这些秘密被收集到结构化的JSON文件中,例如cloud.json、environment.json和actionsSecrets.json。
攻击者不与外部命令和控制服务器通信,而是将被盗数据外泄到GitHub。他们创建标记为Sha1-Hulud: The Second Coming的公共仓库,并将窃取的秘密直接上传到其中。这种技术将恶意活动混入合法的GitHub API流量中,使得识别变得异常困难。
随后,恶意软件建立持久性。它将受感染系统注册为自托管的GitHub运行器,使攻击者能够远程执行任意工作流。此外,恶意工作流文件可以被插入受害者仓库中以维持长期访问,即使之后移除了受感染的软件包。该恶意软件还包含一个破坏性的故障安全机制,当检测到被遏制或分析时,能够擦除本地文件。
传播是部分自动化的。窃取的凭证被用来发布新的恶意npm软件包或创建新的GitHub仓库,从而在JavaScript生态系统中产生类似蠕虫的扩散。
影响
暴露的规模是巨大的。该活动导致:
- 621个受感染的npm软件包
- 25,000个被攻陷的GitHub仓库
- 487个受影响的GitHub组织
- 14,206个被泄露的秘密,其中2,485个仍然有效
暴露的数据类型包括GitHub和npm令牌、SSH密钥、云提供商凭证以及CI/CD秘密。受影响的生态系统涵盖加密相关库、工作流自动化工具和一系列开发平台。
该活动展示了依赖项级别的危害如何轻易升级为完全的多云访问、长期的开发者身份暴露以及CI/CD工作流的广泛渗透。
建议步骤
使用npm的组织应假设可能已暴露,并立即采取行动:
- 审计依赖清单和锁文件
- 移除受感染的软件包,并从可信来源重新安装
- 清除npm缓存
- 轮换在开发和CI/CD环境中使用的所有秘密
- 检查GitHub运行器,删除任何未经授权或未知的条目
- 在存在的情况下移除恶意工作流文件
预防措施
- 在所有GitHub和npm账户上强制执行多因素认证
- 监控GitHub组织内创建的意外仓库
- 应用基于SBOM的扫描和完整性检查
- 加强CI/CD隔离和秘密处理策略