ChainDrop蠕虫:npm投毒窃取云端令牌,软件供应链暗角全面失守

Unit 42揭示ChainDrop npm蠕虫攻击链:通过恶意preinstall脚本窃取OIDC令牌和开发者凭证,感染超400个npm包。本文深入分析SDLC供应链的端点、CI/CD和云运行时攻击面,提供缓解建议,帮助安全团队构建全面的供应链防护策略。

⛓️ Critical 供应链攻击

ChainDrop蠕虫通过恶意npm预安装脚本,在开发者执行npm install时静默感染,攻击GitHub Actions runner进程内存窃取OIDC令牌和开发者凭证,并利用窃取令牌自我传播,同时篡改VS Code等工具实现持久化。该攻击覆盖SDLC的端点、CI/CD和云运行时,凸显供应链安全的盲区。

来源:Palo Alto Unit42 | 2026-08-21 | 原文链接

🔍 关键发现

  • ChainDrop感染超过400个npm包,包括keyv和cacheable-request等流行库,利用preinstall脚本执行恶意负载。
  • 攻击者通过读取GitHub Actions runner进程内存窃取OIDC令牌和临时密钥,并扫描本地开发者凭证。
  • 蠕虫使用以太坊区块链交易管理C2基础设施,并通过篡改VS Code和Claude Code配置实现长期持久化。
  • 现代应用80-90%代码来自开源组件,但SBOM仅在构建结束时生成,无法捕获构建期间执行的恶意行为,需要PBOM和容器SBOM。

⚔️ 攻击链分析

1. 攻击者修改npm包清单,插入恶意preinstall脚本;2. 用户执行npm install时,脚本下载Bun运行时并加载混淆的727KB负载;3. 负载读取GitHub Actions runner内存中的OIDC令牌和密钥,并收集本地开发者凭证;4. 使用窃取的令牌将恶意包重新发布到npm,传播蠕虫,并在VS Code等工具中设置持久化钩子。

🚩 失陷指标 (IOC)

  • 恶意npm包:keyv(被篡改版本)
  • 恶意npm包:cacheable-request(被篡改版本)
  • 可疑行为:npm preinstall脚本引用外部URL下载Bun运行时

🛡️ 缓解建议

  • ✅ 禁用npm生命周期脚本:在CI/CD和开发环境中设置 npm config set ignore-scripts true,或使用 --ignore-scripts 标志安装依赖。
  • ✅ 实施包冷却期,避免立即使用新发布或刚更新的依赖包,并固定依赖到确切commit SHA,而非版本范围。
  • ✅ 限制CI/CD管道出口流量,使用临时/短暂构建服务器,确保构建环境不包含持久化凭证。
  • ✅ 在端点、管道和云端运行时收集并关联遥测数据,检测异常行为,如进程内存访问或工具配置篡改。
  • ✅ 使用SBOM、PBOM和容器SBOM的组合,全面映射第三方包在不同阶段的接触点。

涉及漏洞:[]


⚠️ 本文仅供安全研究与学习,IOC 信息请勿用于非法目的。

🤖 常见问题解答(FAQ)

❓ 如何检测开发环境中是否存在ChainDrop恶意活动?

监控npm install时的异常子进程(如启动Bun运行时)、检查VS Code tasks.json等配置文件是否被篡改、审计进程对GitHub Actions runner内存的读取行为。

❓ ChainDrop如何窃取OIDC令牌?

恶意Python脚本读取GitHub Actions runner进程的/proc/<pid>/mem(Linux)或等效机制,扫描未加密的OIDC临时令牌和密钥,无需访问文件系统。

❓ 企业如何防范npm预安装脚本攻击?

全局禁用脚本执行(--ignore-scripts),仅允许白名单中的脚本;对依赖包进行来源验证和冷却期;使用沙箱运行开发者工具和包管理命令。

[!] CONTACT_CHANNELS

如需商务合作、技术咨询或漏洞反馈,请通过以下离岸节点联系作者。

> PING_AUTHOR (@A1RedTeam)