迷你沙虫卷土重来:npm蠕虫感染超过160个包,包括Mistral
Mini Shai-Hulud npm蠕虫攻击范围扩大,从SAP包扩展至TanStack、Mistral等169个包名下的373个恶意版本。该恶意软件旨在窃取开发者环境和CI/CD运行器中的凭证,并利用可信发布路径传播恶意包。
文章情报
要点
- 攻击范围从SAP包扩大到包括@tanstack、@mistralai、@uipath等169个包
- 恶意软件通过GitHub托管的依赖包运行prepare脚本来执行载荷
- 窃取GitHub令牌、npm令牌、云凭证等,并利用OIDC进行自动传播
- 可信发布机制下的软件来源证明不能保证构建安全
为什么重要
这条新闻值得关注,因为攻击范围从SAP包扩大到包括@tanstack、@mistralai、@uipath等169个包。
技术影响
可能影响模型选型、推理成本、产品能力和评测基准。
Mini Shai-Hulud npm蠕虫已经卷土重来,并且规模远超此前。今年4月,该蠕虫首次被发现针对SAP的npm包,而现在它已经扩展到超过160个包,波及范围包括TanStack、Mistral等知名项目。我们的恶意软件团队检测到169个包名下的373个恶意版本条目。
本次攻击的基本目标没有改变:窃取开发者机器和CI/CD运行器中的凭证,然后利用这些凭证感染更多包。但攻击的规模和发布路径发生了显著变化。这一波攻击不再像是有人手动发布恶意版本,而是恶意软件内置在构建系统中,自动窃取npm和GitHub的访问权限,并滥用可信发布路径来推送新的恶意包。
TanStack仍然是最显眼的受影响集群之一,但已不再是全部。受影响的包现在包括@squawk、@tanstack、@uipath、@tallyui、@beproduct、@mistralai、@draftlab、@draftauth、@taskflow-corp、@tolka等多个作用域包以及一些无作用域包。其中最大的集群是@squawk(87个版本条目)、@tanstack(83个)、@uipath(66个)等。
攻击机制方面,与SAP波次有所不同。在受感染的TanStack包中,tarball包含了一个新的混淆文件router_init.js。此外,恶意包添加了一个可选依赖,指向GitHub托管的包,该包包含一个prepare脚本:
"scripts": {
"prepare": "bun run tanstack_runner.js && exit 1"
}npm在安装Git依赖时会运行生命周期脚本,因此一个看似正常的依赖可以悄悄执行恶意载荷。脚本末尾的&& exit 1使得可选依赖失败时,恶意代码已经执行完毕,整个安装过程看起来不那么可疑。
更令人担忧的是本次攻击利用了可信发布机制。可信发布本意是通过OIDC在GitHub Actions工作流中获取短期npm发布令牌,从而消除长期令牌。但当攻击者控制的代码在工作流中运行时,他们可以利用OIDC权限直接生成发布令牌并进行发布。这意味着软件来源证明(provenance)并不能保证构建安全——它只能告诉你包在哪里构建,不能证明构建过程的安全性。
恶意载荷专门针对CI/CD和开发环境,窃取GitHub令牌、npm令牌、GitHub Actions OIDC令牌、AWS凭证、Kubernetes服务账户文件、HashiCorp Vault令牌、环境变量和本地文件系统秘密。更具威胁的是,恶意软件在窃取令牌后,会试图利用这些令牌查找受害者有权限发布的包,修改包档案,注入恶意依赖,提升版本号并发布新的恶意版本。这使得它不仅仅是一个信息窃取器,而是一个能够将受害者的发布权限转化为下一次感染路径的传播工具。
受影响包的完整列表包括@tanstack/history、@tanstack/react-router、@mistralai/mistralai、@uipath/apollo-react等数百个条目。开发者应立即检查自己的依赖,并确保没有使用这些恶意版本。同时,建议在CI/CD环境中严格限制OIDC权限,并监控npm发布活动。