美国网络安全与基础设施安全局(CISA)针对全球最大JavaScript软件包仓库npmjs.com遭受的大规模软件供应链攻击发布紧急安全警报。代号"Shai-Hulud"的自复制蠕虫已渗透500多个npm软件包,通过滥用开发者凭证和npm发布流程注入恶意代码进行主动传播。
自复制型供应链威胁
该蠕虫疑似通过被入侵的维护者账号获得初始访问权限后,会部署复杂载荷扫描环境变量和本地配置文件中的敏感凭证。其专门窃取GitHub个人访问令牌(PAT)以及AWS、GCP和Azure的API密钥,利用CI/CD流程中令牌意外持久化的常见漏洞。
窃取的凭证会被同时传输至攻击者控制的终端节点,并通过GitHub/user/repos API上传至名为"Shai-Hulud"的公开代码仓库。随后蠕虫使用自动化循环流程,利用被盗令牌认证npm仓库,通过npm CLI将恶意JavaScript代码注入受影响开发者依赖树中其他软件包的入口文件(通常是index.js)。
完成注入后,蠕虫会执行npm version patch && npm publish --access public
命令发布携带木马的版本,实现持续传播。其自我复制机制利用了传递依赖特性——任何依赖受感染软件包的项目都可能成为新的宿主。
缓解措施
CISA建议立即采取以下检测和修复措施:
- 检查所有package-lock.json和yarn.lock文件,识别2025年9月16日后发布的软件包。使用npm audit和静态分析工具标记异常代码变更或额外的postinstall脚本
- 轮换所有开发者凭证并撤销暴露的GitHub PAT。对所有开发者账户(特别是GitHub和npm登录)强制执行防钓鱼多因素认证(MFA)
- 部署入侵检测/防御系统(IDS/IPS)规则监控异常SSH和HTTPS连接。拦截流向已知可疑终端(包括webhook.site域名)的出站流量,审计防火墙日志中非常规DNS查询和陌生IP段的出口流量
- 移除不必要的GitHub应用和OAuth权限。启用分支保护规则、密钥扫描和Dependabot安全更新。审计webhook和仓库级密钥的未授权变更
- 将依赖项固定至2025年9月16日前发布的已知安全版本。在package.json中设置严格语义版本范围(如"lodash": "4.17.21")防止意外更新至受感染版本
加强整个开发流程的警惕性对遏制蠕虫传播、维护npm生态安全至关重要。
参考来源:
CISA Warns of Shai-Hulud Self-Replicating Worm Compromised 500+ Packages in npm Registry
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf
客服小蜜蜂(微信:freebee1024)