Hacker News 中文摘要

RSS订阅

事后分析:axios NPM供应链安全事件 -- Post Mortem: axios NPM supply chain compromise

文章摘要

axios npm包供应链遭入侵事件分析报告,详细说明了攻击过程、影响范围及修复措施,旨在提高开源软件供应链安全性。

文章总结

axios npm供应链安全事件分析报告

事件概述

2026年3月31日,axios项目在npm仓库中发布的两个恶意版本(1.14.1和0.30.4)被确认为供应链攻击事件。这两个版本注入了一个名为plain-crypto-js@4.2.1的恶意依赖,会在macOS、Windows和Linux系统上安装远程访问木马(RAT)。

影响范围

  • 恶意版本在npm上存续约3小时后被移除
  • 受影响用户需检查项目中的lock文件: shell grep -E "axios@(1\.14\.1|0\.30\.4)|plain-crypto-js" package-lock.json yarn.lock 2>/dev/null

攻击详情

  • 攻击者通过针对axios项目核心维护者的社会工程攻击获取了其个人电脑控制权
  • 攻击者随后使用窃取的npm账户凭据发布了恶意版本
  • 攻击模式与针对开源维护者的其他类似攻击活动一致

事件时间线

  • 3月30日05:57 UTC - plain-crypto-js@4.2.0发布到npm
  • 3月31日00:21 UTC - 包含恶意依赖的axios@1.14.1发布
  • 约01:00 UTC - axios@0.30.4发布相同payload
  • 01:38 UTC - 社区成员开始报告问题并联系npm
  • 03:15 UTC - 恶意版本从npm移除
  • 03:29 UTC - plain-crypto-js从npm移除

安全改进措施

| 措施 | 类型 | |------|------| | 重置所有设备和凭据 | 预防 | | 建立不可变发布设置 | 预防 | | 采用OIDC流程进行发布 | 预防 | | 提升整体安全态势 | 预防 | | 更新GitHub Actions采用最佳实践 | 预防 |

经验教训

  • 不应直接从个人账户发布包
  • 缺乏自动化检测未授权发布的机制
  • 开源维护者已成为高级社会工程攻击的目标
  • 需要持续监控和改进安全措施

社会工程攻击细节

攻击者精心策划了针对维护者的社会工程攻击: 1. 伪装成某公司创始人身份接触目标 2. 邀请目标加入精心设计的Slack工作区 3. 安排MS Teams会议,在会议中诱导安装恶意软件 4. 整个攻击过程专业且极具迷惑性

致谢

特别感谢社区成员@DigitalBrainJS的快速响应,以及npm安全团队和开源社区的支持。


注:本文档已精简原始GitHub issue中的非核心内容,保留关键事件细节和安全建议。

评论总结

以下是评论内容的总结:

1. 攻击事件与发现过程

  • 社区成员在3月31日UTC时间01:00左右报告了入侵问题,攻击者使用被入侵的账户删除了这些问题。
    • "Interesting it got caught when it did."(有趣的是它被发现了)

2. 供应链攻击的增加与npm的安全问题

  • 最近几周供应链攻击显著增加,npm需要加强对公共项目中恶意代码的静态分析(SA)。
    • "Incredible uptick in supply chain attacks over the last few weeks."(最近几周供应链攻击显著增加)
    • "npm specifically needs to up their game on SA of malicious code embedded in public projects."(npm需要加强对公共项目中恶意代码的静态分析)

3. 安全措施与建议

  • OIDC认证:OIDC流程是否能阻止类似问题尚不明确。

    • "Does OIDC flow block this same issue of being able to use a RAT to publish a malicious package?"(OIDC流程是否能阻止使用RAT发布恶意包的问题?)
  • 包签名:建议强制要求包签名或提交签名,npm过去拒绝支持可选签名是一个错误。

    • "Can we please mandate signing packages? Or at least commits?"(能否强制要求包签名或提交签名?)
    • "NPM rejected PRs to support optional signing multiple times more than a decade ago now, and this choice has not aged well."(npm十多年前多次拒绝支持可选签名的PR,这一选择现在看来并不明智)
  • 硬件安全:建议npm使用基于TPM的硬件安全设备,限制高权限仓库的更新权限。

    • "NPM could procure and configure laptops with identity rooted in the laptop TPM instead of 2FA."(npm可以配置基于TPM的笔记本电脑,取代2FA)

4. 攻击的潜在影响与担忧

  • 攻击可能更加隐蔽,例如通过休眠机制延迟触发。
    • "The next incarnation of this, I worry, is that the malware hibernates somehow."(我担心下一次攻击中恶意软件会休眠以最大化破坏)

5. 依赖管理与检测工具

  • 依赖锁定:建议在npm生态中默认使用依赖哈希锁定,类似Python的pip install --require-hashes

    • "pip install --require-hashes with a locked requirements file catches exactly this."(使用哈希锁定的pip install可以精确捕获此类问题)
  • 检测工具:提供了检测受感染机器的工具。

    • "Check if your machine was affected with this tool."(用这个工具检查你的机器是否受影响)

6. 对axios的替代建议

  • 部分开发者建议弃用axios,转而使用原生fetch和vite。
    • "After the compromise I reviewed some projects and converted them to pure JS fetch and vite."(入侵事件后,我审查了一些项目并将其转换为纯JS fetch和vite)

7. 根本原因与解决方案

  • 根本原因是维护者使用同一设备进行多种操作,缺乏隔离。
    • "Seems to me the root of the problem was that the guy was using the same device for all sorts of stuff."(问题的根本原因是维护者使用同一设备进行多种操作)

8. 社会工程与攻击细节

  • 攻击中社会工程的部分是最值得关注的。
    • "We now have a small peek into the actual meat of the social engineering, which is the only interesting news imho."(我们现在看到了社会工程的实际细节,这是唯一有趣的新闻)