随着现代软件开发日益依赖开源生态系统,npm作为JavaScript及Node.js生态的核心包管理平台,承担着关键角色。然而,正因其广泛使用和依赖关系的复杂性,也使其成为供应链攻击的重点目标。近日,一场针对npm生态链的规模空前的恶意攻击引发业界高度关注。该攻击利用被称为bundle.js的恶意脚本,感染了至少40个npm软件包,导致大量开发者的凭证信息被盗取,并催生了一个自我传播的恶意蠕虫,带来了深远的安全隐患。攻击的核心机制在于恶意代码被伪装成正常的软件包内容植入,通过调用NpmModule.updatePackage函数,下载受害包的tarball文件,对package.json文件进行修改,注入bundle.js脚本,随后重新打包并发布。这一过程实现了自动化的木马植入,使下游依赖的项目也无声无息中被感染,形成链式反应。
bundle.js执行时会利用TruffleHog扫描工具,秘密扫描开发者电脑及运行环境中的各种令牌和云凭证,如GITHUB_TOKEN、NPM_TOKEN以至AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY。攻击者通过验证这些tokens的有效性,访问GitHub API,进一步收集信息并上传至外部控制服务器。不仅如此,恶意脚本还会自动生成并提交GitHub Actions工作流,确保持续数据窃取并利用持续集成环境中敏感凭证的默认可用性,实现长期隐蔽的恶意操作。这种复杂的多阶段攻击不仅窃取敏感信息,还极具传播性,使得影响范围迅速扩大。相关安全公司Socket和ReversingLabs披露,目前确认受影响的npm软件包超过40个,涉及angulartics2、@ctrl系列的多个组件以及多个@nativescript-community和ngx系列包。进一步研究发现,攻击初始源头疑为名为"techsupportrxnt"的npm账户。
该账户的恶意版本"rxnt-authentication"软件包首次被上传于2025年9月14日,触发了后续大范围的感染。攻击者通过该账户感染后,无限复制传播,利用感染开发者的权限自动将恶意代码注入其所有维护的npm软件包,演变为具备自我扩散特性的"蠕虫"级攻击。此类自传播攻击首次在JavaScript生态中被完整记录,揭示了复杂开源供应链中潜在的危险。除了npm主线软件包外,攻击还波及CrowdStrike名下的多个内部发布包和相关社区依赖,受影响软件包总数远超最初披露的40个,甚至达到五百多个。对此,CrowdStrike官方表态积极配合npm,共同排查并旋转密钥,避免其核心产品受到波及。研究人员同时指出,攻击者还将受感染账户中私人GitHub仓库公开迁移,试图借此进一步破解硬编码的凭证与源码。
这种"迁移"仓库命名带有"-migration"后缀,类似上月爆发的针对nx构建系统的s1ngularity攻击,显示了攻击者策略的延续性和复杂程度。此次攻击的影响之严重,也促使云安全企业Wiz和GitGuardian发布紧急预警,详细列出了主要被泄露的秘密信息类型,包括大量GitHub令牌、npm访问令牌及AWS访问密钥。安全专家强调这反映了开放源代码生态面临的共性威胁,开发者和企业都应以极端警惕的态度对待供应链安全。与此同时,相关团队提醒受影响用户立即审计自身开发和部署环境,更新被感染软件包为安全版本并尽快更换相关凭证,以阻止信息进一步泄露和攻击扩散。此次npm攻击事件恰逢Rust团队发布针对crates.io用户的钓鱼邮件警告,黑客通过伪造域名rustfoundation.dev发送邮件,诱导用户访问恶意GitHub登录页面窃取凭证,表明跨语言开源生态面临的安全风险并非孤立存在,而是全球范围内长期存在的趋势。总结来看,供应链攻击的新型手法愈发隐蔽且自动化,攻击者不仅窃取凭证,还能持续扩散恶意代码,深入影响软件开发的根基。
要有效应对,除了软件包管理平台和安全公司加强监控审核,个人和企业开发者也必须提升安全意识,采用多因素认证、最小权限原则和自动扫描等综合防护措施。持续跟踪软件包变动、及时更新依赖版本、避免使用不可信或未经验证的第三方软件包、定期审查CI/CD流水线安全配置,均是必不可少的防御步骤。此外,社区和平台应大力推动开源项目的开发者安全培训,强调凭证管理安全和包发布规范,筑牢供应链安全第一道防线。随着恶意供应链攻击变异升级,全球软件生态的安全压力与日俱增。通过此次事件,我们看到技术创新与安全防护的博弈从未停歇。全面洞察攻击细节,科学评估风险影响,积极布局防御策略,将是保护开源生态健康发展的关键所在。
未来,推动跨平台、多方协作的安全联盟,建设透明开放的安全响应机制,将是阻止类似攻击进一步扩散的根本之策。唯有群策群力,才能为依赖开源构建现代数字经济的全社会提供坚实保障。 。