网络安全

Microsoft 对 ChainDrop 攻击的分析:自传播蠕虫感染超过 400 个 npm 软件包

Microsoft 威胁情报分析了一起大规模 npm 供应链攻击。在攻击中,一种用于窃取凭据的蠕虫隐藏在由不同实体发布的超过 400 个软件包中。该恶意软件收集开发人员和 CI/CD 环境中的机密信息,然后利用 npm 和 GitHub 令牌重新发布恶意版本,并开辟更多传播路径。

2026-08-04
2 分钟阅读
8 浏览量
فريق تحرير certi.news
Microsoft 对 ChainDrop 攻击的分析:自传播蠕虫感染超过 400 个 npm 软件包

Microsoft 威胁情报披露了一起大规模 npm 供应链攻击的细节,该攻击影响了与表面上互不关联的发布者相关的 400 多个软件包,其中包括企业软件生态系统中的软件包,例如 keyvflat-cachecache-manager。恶意版本包含 Mini Shai-Hulud 蠕虫的一个变体。这是一种基于 Bun 构建且高度混淆的 JavaScript 载荷,旨在窃取凭据,并通过重新发布恶意更新自动传播。

这起攻击的运作方式尤其值得关注:该恶意软件不仅从开发人员设备或构建环境中窃取令牌,还利用这些令牌访问 npm、GitHub、Amazon Web Services、Kubernetes 和 HashiCorp Vault,然后扫描被窃取身份所允许访问的资源和机密信息。根据 Microsoft 于 2026 年 8 月 4 日发布的分析,任何导入过受影响软件包且启用了 npm 生命周期脚本的工作站或构建代理,都应被视为已遭入侵。

在开发环境中提前执行

受影响版本通常会加入一个 preinstall 脚本,在软件包安装完成前运行名为 setup.mjs 的文件。该文件会启动一个大型且经过混淆的 Bun 软件包,从而允许载荷在应用测试开始或一些传统安全检查到达这一阶段之前,于开发人员设备和构建节点上执行。

蠕虫首先检查环境,以确定其运行于开发人员工作站还是 CI/CD 任务中。在开发人员设备上,它会将自身分离,使其在安装结束后继续于后台执行;而在 CI/CD 环境中,它会与任务保持关联,以利用工作流机密、代理凭据以及通过 OpenID Connect 获得的部署权限。它还会检查是否已有其他实例运行,并根据 Microsoft 的观测,在俄语系统上停止运行。

窃取凭据并将其转化为传播能力

载荷首先收集本地可用的凭据文件、环境变量、命令历史记录、SSH 密钥和云工具信息,以及 GitHub Actions 运行器内存中的数据。除其他事项外,它还会尝试获取 GitHub CLI 令牌。随后,它使用提取的凭据调用 npm、GitHub、AWS、Kubernetes 和 HashiCorp Vault 的服务接口,验证权限并收集更多机密信息。

结果会被压缩为 JSON,并使用 AES-256-GCM 加密,同时通过 RSA-OAEP-SHA256 加密 AES 密钥,然后发送至由攻击者控制的 HTTPS 端点。当主要通道不可用时,攻击者会使用 GitHub 作为数据外传的备用通道。Microsoft 指出,在分析时处于活动状态的基础设施解析到 npm-cache[.]com,而此前还出现过 pypi-get[.]comjs-mirror[.]com 等候选域名。

其主要传播机制是检查 npm 令牌,确认令牌是否允许写入软件包或绕过双因素身份验证,然后下载该受入侵身份可访问的每个软件包的最新 tarball 文件。蠕虫会将自身复制到归档文件中,添加安装加载器和生命周期脚本,并递增补丁版本号后重新发布。这解释了为何会出现看似普通 patch 更新的恶意版本,而源代码仓库中却没有相应的 commit、合并请求或匹配的版本标签。

通过 GitHub 的其他传播路径

载荷会检查 GitHub 令牌的范围,统计可写入的仓库,并搜索能够通过工作流泄露其他机密信息的仓库。它还包含一条针对通过 GitHub Actions 发布的 npm 软件包的路径,将这些软件包视为可信发布者;由于发布来自合法的工作流身份,这可能使已发布版本获得有效的 provenance。

蠕虫还能够向仓库分支中注入配置文件,包括与 Claude 和 Visual Studio Code 相关的路径,例如 .claude/settings.json.claude/setup.mjs.vscode/tasks.json.vscode/setup.mjs。这些修改提供了第二条感染路径,即使原始软件包安装已经结束,也可能在使用 Claude 或 Visual Studio Code 时重新执行载荷。Microsoft 表示,其中一条 GitHub 备用路径还会尝试安装一个令牌监控组件,并在受监控令牌被撤销时触发有条件的破坏性处理程序。

Microsoft 提出了哪些建议?

Microsoft 建议将 npm CLI 更新至版本 12,并使用 min-release-age 功能;同时审查依赖树、锁定文件、制品仓库和 CI 缓存,查找五个受影响版本,包括间接引用。还应固定已知安全的版本,并清除开发人员设备和构建主机上的 npm 与 yarn 缓存,尤其是在受入侵归档文件已进入共享 CI 缓存的情况下。

如果构建系统或工作站导入过受影响版本,应从干净设备轮换凭据和机密信息,因为第二阶段的执行可能会泄露令牌并影响构建过程的完整性。建议还包括为 Microsoft Defender Antivirus 启用云端保护,启用 Microsoft Defender for Endpoint 和 Microsoft Defender for Containers 的测量数据,并通过 Microsoft Defender XDR 在开发资产和 CI 环境中启用调查工作流。

响应措施并不局限于检查设备。生产软件制品的组织还应审查发布流程的加固情况、令牌范围、工作流批准、受保护环境、发布来源证明,以及异常自动化发布的检测机制,因为这起事件与滥用 GitHub Actions OIDC 权限攻击 CI/CD 流水线的行为一致。完成处置后,应从可信基线重新构建项目,确认缓存和制品仓库中不存在受入侵的指纹,并审查测量数据,查找 Math_Symbol.jsMath_init.js 等 Node.js 残留,或名称类似于 math_<guid>.js 的文件,同时重新构建基础镜像和模块化构建代理。

新闻来源
Microsoft Security Blog
查看原始来源 ↗
ف
作者

فريق تحرير certi.news

同一分类

你可能还喜欢

查看所有新闻