将来源证明伪装成掩护的npm攻击

将来源证明伪装成掩护的npm攻击

💡 原文英文,约600词,阅读约需2分钟。
📝

内容提要

安全研究人员披露了一起npm供应链攻击,影响超400个包,涉及Keyv和Cacheable。攻击者利用窃取的开发者凭据发布恶意版本,植入Mini Shai-Hulud蠕虫,窃取凭据并自动发布感染包。该攻击暴露了可信发布的弱点,建议升级npm CLI 12、固定版本、重建受影响系统,并限制自动化流程权限。

🔎

延伸解读

攻击手法:利用可信发布流程

此次攻击并非直接攻破npm仓库,而是通过窃取维护者的凭据,在受信任的发布流程中植入恶意代码。攻击者利用npm的preinstall钩子,在安装时自动执行恶意脚本,从而在开发机和CI环境中窃取更多凭据。这种手法表明,供应链攻击正从直接入侵转向利用开发者已信任的发布环节,使得恶意包甚至能携带有效的来源证明,增加了检测难度。

对CI/CD环境的警示

共享CI系统成为攻击的放大器,因为GitHub Actions会缓存依赖,且这些缓存未签名或验证。攻击者利用CI作业中的活动连接,访问工作流密钥和发布权限。这提醒工程团队,应避免在安装依赖的流水线部分保留发布权限,并限制自动化流程的权限范围,以降低被恶意利用的风险。

缓解措施与局限

微软建议升级npm CLI 12、固定已知良好版本,并利用min-release-age设置发布时间门槛,以便团队在安装前有时间审查新版本。然而,一旦恶意包运行了生命周期脚本,仅轮换被盗令牌可能不够,还需重建受影响的机器和基础镜像、清除共享缓存,并从可信依赖重新创建软件工件。这些措施强调了纵深防御的重要性。

Q&A

这次npm供应链攻击影响了多少包?

超过400个包,包括与Keyv和Cacheable相关的项目。

攻击者是如何实施这次npm供应链攻击的?

攻击者使用窃取的开发者凭据发布恶意版本,植入Mini Shai-Hulud蠕虫,该蠕虫会搜索开发者机器和CI环境中的其他凭据,一旦发现有效的npm发布令牌,就会下载账户可访问的每个包的最新版本,注入恶意预安装钩子,提升补丁版本号并发布受感染的包。

Mini Shai-Hulud蠕虫在CI环境和工作站上分别有什么危害?

在CI环境中,它会保持与活动作业的连接,从而访问工作流机密、运行器凭据和发布权限;在工作站上,它会在后台运行,并向Visual Studio Code和Claude注入启动文件,如.vscode/tasks.json和.claude/settings.json。

为什么这次攻击暴露了可信发布的弱点?

因为攻击者利用的是受信任的开发者凭据,并且恶意软件在授权工作流内运行,可以请求自己的短期令牌,而不是窃取长期凭据,甚至生成的恶意包可以带有有效的来源证明。

微软建议如何防范此类npm供应链攻击?

微软建议升级到npm CLI 12,固定已知良好的版本,并使用min-release-age给团队时间审查新版本。此外,可能需要重建受影响的机器和基础镜像,清除共享缓存,并从可信依赖重新创建软件工件。

为什么仅轮换被盗令牌可能不够?

因为一旦受感染的包运行了生命周期脚本,恶意软件可能已经持久化或窃取了其他凭据,仅轮换令牌无法清除已存在的感染,需要重建系统和清理环境。

这次攻击对工程团队有什么教训?

工程团队应将发布访问权限与安装依赖的管道部分分离,并限制自动化流程的权限,因为共享CI系统(如GitHub Actions)会重用依赖,且缓存文件未签名或验证,增加了风险。

🏷️

标签

➡️

继续阅读