文章摘要
2025年11月24日,HelixGuard发现NPM注册表中300多个组件在几小时内被恶意篡改。攻击者通过伪造Bun运行时环境,植入恶意脚本窃取敏感信息(如NPM令牌、云服务凭证等),并通过创建名为"SHA1HULUD"的GitHub Action runner外泄数据。这与2025年9月发现的"Shai-Hulud"攻击手法相似。
文章总结
标题:Shai-Hulud恶意软件卷土重来:300多个NPM组件在数小时内被感染
概述
2025年11月24日,HelixGuard团队发现NPM注册表中超过300个组件在几小时内被同一方法感染。这些组件的新版本伪装成引入了Bun运行时,添加了preinstall: node setup_bun.js脚本和一个经过混淆的bun_environment.js文件。恶意代码会下载并运行TruffleHog工具,窃取NPM令牌、AWS/GCP/Azure凭证和环境变量等敏感信息,并通过名为SHA1HULUD的GitHub Action runner外泄数据。攻击手法与2025年9月观察到的"Shai-Hulud"攻击相似。
感染行为分析
以@asyncapi/specs组件为例,攻击者通过修改package.json文件引入恶意脚本:
diff
+ "preinstall": "node setup_bun.js"
setup_bun.js会调用高度混淆的bun_environment.js(文件大小超过10MB),该脚本主要功能包括:
1. 收集环境中的敏感信息(云服务凭证、GitHub/NPM令牌)
2. 使用TruffleHog进行秘密扫描
3. 通过GitHub Actions外泄数据
4. 修改package.json实现蠕虫式传播
数据外泄方式
恶意代码会:
1. 创建.github/workflows/formatter_123456789.yml工作流文件
2. 建立名为SHA1HULUD的GitHub Action runner
3. 将被盗凭证通过双重Base64编码存入actionsSecrets.json
受影响组件(部分示例)
| 组件名称 | 版本 | 周下载量 | |---------|------|---------| | @zapier/zapier-sdk | 0.15.5 | 2,636,363 | | @asyncapi/specs | 6.8.2 | 1,439,127 | | posthog-node | 5.11.3 | 1,551,681 |
(注:完整列表包含300多个组件,此处仅展示部分高下载量组件)
安全建议
- 立即检查是否使用了受影响组件版本
- 撤销可能泄露的API令牌和凭证
- 审查GitHub Actions中的异常工作流
- 更新组件至官方确认的安全版本
该攻击显示出攻击者对开源供应链的深入理解,通过模仿合法工具和利用自动化传播手段,能够在短时间内造成广泛影响。
评论总结
这篇评论主要围绕NPM生态系统安全问题展开讨论,主要观点如下:
- 对NPM安全性的担忧
- vintagedave:"每次更新依赖版本时都担心引入未知风险...感觉npm完全没有安全保障"
- darkamaul:"自动化依赖更新比单日漏洞风险更大...更难撤销已进入数千个lock文件的受感染包"
- 近期攻击事件的影响
- timgl(PostHog联创):"我们是这次攻击的受害者...已撤销受影响包并发布新版本"
- vintagedave:"这不仅仅是小型依赖...AsyncAPI和Zapier也受影响,似乎是重大事件"
- 生态系统问题根源
- spiderfarmer:"这些特定包最初是如何被攻破的?"
- wolfi1:"left-pad事件后npm似乎没有改进...供应链攻击已成为npm生态系统的常态"
- 解决方案建议
- tomaytotomato:"npm是否可以采用类似Java的反向域名命名系统?"
- kome:"为什么前端开发者不先学好HTML/CSS,只在必要时使用原生JS?"
- 潜在扩展风险
- westoque:"类似攻击可能很快会发生在基于Electron的应用上...可能更危险"
- gonepivoting:"正在逆向分析恶意负载...将在几小时内分享发现"
- 行业反思
- inesranzo:"如果JS生态系统继续这样,我们就完了"
- amiga386:"'无法预防'说唯一经常发生这种事的包管理器"