AsyncAPI npm包被投毒:CI/CD管道沦陷传播多阶段僵尸网络
2026年7月,攻击者通过攻陷AsyncAPI官方CI/CD管道,向npm注册表发布四个带毒包(@asyncapi/generator-helpers等),利用OIDC可信发布者绕过传统令牌保护。恶意载荷Miasma支持6种C2通道、凭据窃取、AI工具投毒和蠕虫传播。本文深度解析攻击链、IOC及缓解建议,帮助安全团队防御npm供应链攻击。
⛓️ Critical 供应链攻击
攻击者通过攻陷AsyncAPI项目的CI/CD管道,向四个@asyncapi命名空间的npm包植入恶意代码,分发多阶段僵尸网络加载器Miasma。该恶意软件利用OIDC可信发布者机制发布带有合法SLSA出处证明的恶意包,执行时通过IPFS下载加密第二阶段载荷,具备多C2通道、蠕虫式传播、AI工具投毒和持久化能力。
来源:The Hacker News | 2026-07-15 | 原文链接
🔍 关键发现
- 四个受影响的npm包:@asyncapi/generator-helpers@1.1.1、@asyncapi/generator-components@0.7.1、@asyncapi/generator@3.3.1、@asyncapi/specs(v6.11.2和v6.11.2-alpha.1)
- 恶意代码不在install钩子中,而在模块被require()时触发,通过后台Node进程从IPFS下载并执行加密的第二阶段载荷sync.js
- Miasma框架集成了744个模块,支持HTTP、Nostr relay、IPFS、BitTorrent DHT、libp2p GossipSub P2P网格和以太坊智能合约共6种C2通道
- 攻击者通过CI/CD管道推送代码(使用占位git身份),利用项目合法GitHub Actions发布管道和OIDC集成发布包,未窃取npm令牌
- 恶意包携带合法SLSA出处证明,但出处仅证明由授权工作流生成,无法保护被攻陷的推送凭证
- 恶意软件包含死亡开关:监控被窃令牌,若被撤销则触发目录擦除;并规避俄罗斯语言环境以及CrowdStrike等安全工具
⚔️ 攻击链分析
1. 攻击者获得AsyncAPI官方仓库的推送权限,使用占位git身份向四个仓库的默认分支推送恶意提交。 2. 仓库的合法GitHub Actions发布工作流触发,通过npm OIDC可信发布者集成自动生成具有合法SLSA出处证明的恶意包并发布到npm。 3. 用户安装或更新受影响包后,当Node.js项目require()加载受感染模块时,触发后台Node进程从IPFS下载加密第二阶段载荷(sync.js)。 4. sync.js解密后加载Miasma多阶段框架,执行凭据窃取、AI工具投毒、局域网横向移动以及npm/PyPI/Cargo注册表蠕虫式传播。
🚩 失陷指标 (IOC)
ipfs[.]io/ipfs/QmQobZSp1wRPrpSEQ56qnyq7ecZh5Bg5k1fnjt4SUwwHb9@asyncapi/generator-helpers@1.1.1@asyncapi/generator-components@0.7.1@asyncapi/generator@3.3.1@asyncapi/specs@6.11.2@asyncapi/specs@6.11.2-alpha.1
🛡️ 缓解建议
- ✅ 立即检查项目中是否使用了上述恶意包版本,若存在则视为潜在入侵,进行全盘排查和应急响应
- ✅ 审查并锁定npm依赖版本,避免自动更新到受影响版本;启用npm audit和依赖扫描工具(如Socket、OX Security等)
- ✅ 加强CI/CD管道安全:实施严格的代码审查、签名提交、最小权限原则,对发布工作流执行环境使用短期凭证和硬件密钥
- ✅ 监控isolation、沙箱逃逸检测和异常进程行为,尤其关注从IPFS/外部网络加载JavaScript的后台Node进程
涉及漏洞:[]
⚠️ 本文仅供安全研究与学习,IOC 信息请勿用于非法目的。
🤖 常见问题解答(FAQ)
❓ 攻击者如何绕过npm令牌保护?
攻击者未窃取npm令牌,而是通过获取GitHub仓库推送权限,利用项目的OIDC可信发布者集成触发合法工作流发布包,使恶意包带有合法SLSA出处证明。
❓ 恶意代码何时触发执行?
不在npm install时触发,而是在Node.js应用require()被感染的模块时执行,即构建或CI运行时调用该库的瞬间才会激活恶意载荷。
❓ 是否有已知的规避检测行为?
恶意软件会检测系统是否为沙箱/虚拟机,跳过语言设置为俄语的系统,以及CrowdStrike、SentinelOne、Microsoft Defender等安全产品存在的环境,并包含死亡开关防令牌撤销。