00:00:00这可能是我们见过的最大的 NPM 供应链漏洞之一,
00:00:03不,这不是愚人节玩笑,只是时机太糟了,大家需要意识到这一点。
00:00:07它发生在 Axios 包中,这个 HTTP 客户端本周已被安装了 1.01 亿次,
00:00:13并且有超过 17.4 万个依赖项目。所以它已经影响了像 Datadog、
00:00:18OpenClaw 和 WordPress 这样的包,而且它还被关联到了朝鲜黑客。
00:00:22那么让我们直接开始,看看发生了什么。
00:00:29事情是这样的,在 2026 年 3 月 31 日,一名攻击者入侵了
00:00:34Axios 首席维护者的 NPM 账号,并发布了两个后门版本:版本 1.14.1,
00:00:39它被标记为最新版本;以及版本 0.30.4,它被标记为遗留版本。
00:00:44在这些包中,他们引入了一个名为 plaincryptojs 的影子依赖,
00:00:48它本质上就是正常的 crypto.js 包,但做了一个小改动,
00:00:52它包含一个名为 setup.js 的安装后脚本。这意味着每个用户和每个
00:00:58安装这些受损包的 CI 环境也都在运行这个脚本。脚本本身包含
00:01:02混淆代码,用于检查你正在使用的操作系统,然后连接到服务器
00:01:07下载与你当前系统相关的第二个有效负载。所以没有人在
00:01:12这次攻击中是安全的,他们甚至还确保了 macOS 的有效负载
00:01:16在 Intel 和 Apple 芯片的 Mac 上都能运行。而这第二个负载才是真正可怕的,
00:01:20这是一个 RAT(远程控制木马),它在所有操作系统上的工作方式基本相同。
00:01:25首先它会扫描你的文件,翻阅你的文档、桌面
00:01:29和配置文件夹,Windows 版本甚至会扫描你的 OneDrive、AppData
00:01:33以及系统上的每一个驱动器盘符,然后将该文件列表发送回服务器,
00:01:38可能是为了查看是否有值得偷的东西。在那之后,它就会开始
00:01:42发送心跳信号,每隔 60 秒就会向总部报告你的主机名、用户名、操作系统、
00:01:47时区、硬件型号以及所有正在运行的进程列表,这样攻击者就能看到
00:01:52你正在运行什么软件,以及是否在活跃使用。如果这些听起来还不够糟糕,
00:01:56最坏的部分还在后面,攻击者随时可以远程发出四个指令,
00:02:00让他们浏览你系统上的任何目录,运行任意的 Shell 命令或脚本,
00:02:05植入并执行额外的恶意软件,甚至杀掉整个进程以掩盖行踪。事实上,
00:02:10他们甚至确保原始的 setup 脚本会自我删除,然后删除含有
00:02:15安装后脚本的 package.json,并用干净的版本替换它,试图让这变得
00:02:19尽可能难以察觉。所以你可以看到这次黑客攻击非常严重,它的设计目标
00:02:23是针对开发者的工作站和 CI/CD 运行环境,寻找各种类型的秘密,如 .env 文件、
00:02:28NPM 令牌、SSH 密钥及其他任何东西;任何执行了这些恶意负载的系统
00:02:34都应该被视为发生了全面的凭证泄露。除此之外,关于
00:02:38NPM 账号是如何被入侵的仍然是个谜。维护者指出他开启了两步验证,
00:02:43并且他的 GitHub Action 流水线也开启了认证。所以目前看来,
00:02:47这些包是使用 NPM CLI 通过一个长期有效的 NPM 访问令牌发布的。所以接下来的问题是
00:02:53他们是如何拿到那个令牌的,维护者甚至认为有人可能
00:02:56获取了他的账号恢复代码,但具体是怎么做到的目前还是个谜。如果你想
00:03:01查看自己是否受到了影响,请务必在你的锁文件中搜索受影响的
00:03:04Axios 版本以及 plaincryptojs 包,并在你的 node_modules 中
00:03:09搜索该包本身。如果你发现了它们,不幸的是,这是个坏消息。你也可以
00:03:14检查系统中是否有木马遗留痕迹,我会把相关的完整报告链接放在下方,你可以按照
00:03:18步骤操作,并了解如果已被入侵该怎么办。在未来,也有一些
00:03:22你可以采取的步骤来尝试预防这些攻击,第一条就是永远提交你的锁文件,
00:03:26并确保在流水线中使用 npm ci 命令而不是 npm install 命令。
00:03:31你还应该确保在包管理器中设置了最短存在时间,确保
00:03:35安装的包至少已经发布了 48 小时,希望能及时发现任何恶意包,
00:03:39因为这次的 Axios 漏洞实际上在 3 小时后就被发现并删除了。最后,
00:03:44如果可能的话,在运行 npm install 时使用 ignore-scripts 标志,或者直接使用
00:03:48像 Bun 这样的包管理器,它默认会阻止所有安装后脚本,只在
00:03:53你明确列为信任的依赖项上运行。我希望这是我们今年看到的
00:03:57最大规模的攻击,但我们确实看到了越来越多的此类事件,所以请确保
00:04:01注意安全,并在下方评论区告诉我你对这一切的看法,
00:04:04或者点击订阅,一如既往,我们下期再见。