你每天 npm install 的那些包,真的安全吗?上周,JavaScript 世界最受信赖的 HTTP 库之一——Axios——遭遇供应链攻击,恶意代码甚至渗透进了 OpenAI 的签名流程,迫使 ChatGPT Desktop 等产品紧急更换安全证书。这不是一次普通的漏洞披露,而是一记响亮的警钟。

发生了什么

3 月 30 日,安全公司 StepSecurity 发现 npm 上出现了两个恶意版本的 Axios:axios@1.14.1axios@0.30.4。攻击者劫持了 Axios 主要维护者的账号,在这些版本中悄悄注入了一个名为 plain-crypto-js 的隐藏依赖。这个依赖会在安装时自动执行,向 Windows、macOS 和 Linux 设备投放远程访问木马(RAT),让攻击者可以远程控制受感染的机器。

Axios 每周的下载量超过 1 亿次,是 JavaScript 生态中最重要的 HTTP 客户端库之一。这意味着,哪怕只有极小比例的开发者在那个窗口期内安装了这两个版本,受影响的范围也相当可观。

为什么连 OpenAI 也中招

事情到这里还只是”又一个 npm 包被投毒”的故事。但更大的问题在于连锁反应。

3 月 31 日,OpenAI 用于 macOS 应用签名流程的 GitHub Actions 工作流自动下载并执行了恶意版本 axios@1.14.1。这条工作流拥有访问 OpenAI macOS 应用签名证书和公证材料的权限——而这些证书正是用来签署 ChatGPT Desktop、Codex、Codex CLI 和 Atlas 等产品的。

换句话说,攻击者通过一个 npm 包,触及了 OpenAI 最核心的产品签名基础设施。OpenAI 在官方博客中坦言了这一点,并迅速发布了更新和新证书来降低风险。

攻击手法为什么这么”精准”

StepSecurity 的分析揭示了一个精心设计的攻击链:

  • 第一步:劫持维护者账号——这是整个攻击的入口,说明即便项目本身代码没问题,账号安全也是命门。
  • 第二步:提前布局恶意依赖——攻击者先发布了一个看似无害的 plain-crypto-js 包,等它就位后才在 Axios 中引入这个依赖,让审查更难发现异常。
  • 第三步:注入手法极其隐蔽——恶意代码的注入方式经过精心伪装,仅通过表面检查几乎无法察觉。
  • 第四步:自动清理痕迹——木马运行后会自我删除,抹去入侵证据。

这种”外科手术式”的精准操作,说明攻击者对 npm 生态和 CI/CD 管线的工作机制非常熟悉,很可能是一次有组织、有目标的攻击。

给开发者和管理者的实用建议

如果你是开发者:

  • 立即检查项目中是否存在 axios@1.14.1axios@0.30.4,如有请立即升级至安全版本。
  • 检查 CI/CD 管线是否在攻击窗口期内执行过 npm install,如果是,需要审核运行日志和后续行为。
  • 考虑使用 版本冷却策略(cooldown policy)——新版本发布后等待一段时间再采用,避开攻击窗口。
  • 使用锁定文件(package-lock.json)并验证包的完整性校验和,防止依赖被悄然替换。

如果你管理 AI 产品的供应链:

  • 签名证书等高敏感凭证不应与第三方依赖的构建流程共享同一工作流环境。
  • 对 CI/CD 管线实施最小权限原则——工作流不应自动获取签名证书的访问权限。
  • 将安全监控嵌入构建流程,及时发现异常的网络连接和文件操作。

为什么这事值得关注

Axios 事件的核心教训不是”Axios 有问题”,而是现代软件供应链的脆弱性已经被真正有能力的人盯上了。当一个每周 1 亿次下载的基础库被攻破,下游的连锁反应几乎是不可避免的——OpenAI 的遭遇只是冰山一角。GitHub Advisory Database 中已经出现了多个因 Axios 投毒而受影响的下游项目安全通告。

对于 AI 行业来说,这个问题尤其紧迫。AI 产品越来越多地依赖复杂的开源工具链和 CI/CD 自动化流程。如果构建管线本身可以被攻破,那无论模型跑得多快、参数调得多好,交付给用户的都可能是一个被污染的产品。

说到底,AI 的安全性不仅在于模型本身,也在于构建模型产品的那整条链路。保护好你的链路,才能保护好你的用户。

封面图片:jaydeep_, CC0, via Wikimedia Commons

消息来源

Categorized in:

个人日志,

Last Update: 12 4 月, 2026