Axios供应链攻击通过被入侵的npm账户推送跨平台远程访问木马。

来源: Axios Supply Chain Attack Pushes Cross-Platform RAT via Compromised npm Account

流行的 HTTP 客户端Axios遭遇了供应链攻击,其 npm 包的两个新版本引入了一个恶意依赖项,该依赖项会提供一个能够攻击 Windows、macOS 和 Linux 系统的木马程序。

已发现 Axios 的 1.14.1 和 0.30.4 版本会注入“ plain-crypto-js ” 4.2.1 版本作为虚假依赖项。

根据 StepSecurity 的说法,这两个版本是使用 Axios 主要维护者(“jasonsaayman”)被泄露的 npm 凭据发布的,这使得攻击者能够绕过该项目的 GitHub Actions CI/CD 管道。

安全研究员阿什什·库尔米表示: “它的唯一目的是执行一个安装后脚本,该脚本充当跨平台远程访问木马(RAT)投放器,目标平台包括 macOS、Windows 和 Linux。该投放器会连接到实时命令与控制服务器,并投放特定于平台的第二阶段有效载荷。执行完毕后,该恶意软件会删除自身,并将自身的 package.json 文件替换为干净的版本,以逃避取证检测。”

已安装 Axios 版本 1.14.1 或 0.30.4 的用户必须立即轮换密钥和凭据,并降级到安全版本(1.14.0 或 0.30.3)。恶意版本以及“plain-crypto-js”已不再可从 npm 下载。

Axios 每周下载量超过 8300 万次,是 JavaScript 生态系统中应用最广泛的 HTTP 客户端之一,涵盖前端框架、后端服务和企业应用程序。

库尔米补充道:“这不是临时起意的攻击。恶意依赖项提前18小时就已准备就绪。针对三种操作系统预先构建了三个不同的有效载荷。两个发布分支都在39分钟内遭到攻击。所有痕迹都经过精心设计,旨在自我销毁。”

此次袭击的时间线如下——

  • 2026 年 3 月 30 日 05:57 UTC - 发布了“[email protected]”软件包的干净版本。
  • 2026 年 3 月 30 日 23:59 UTC - 发布了添加了有效载荷的新版本(“[email protected]”)。
  • 2026 年 3 月 31 日 00:21 UTC - 使用被入侵的“jasonsaayman”帐户发布了注入“[email protected]”作为运行时依赖项的新版 Axios(“[email protected]”)。
  • 2026 年 3 月 31 日 01:00 UTC - 使用被入侵的“jasonsaayman”帐户发布了注入“[email protected]”作为运行时依赖项的新版 Axios(“[email protected]”)。

据 StepSecurity 称,此次攻击活动的幕后黑手似乎入侵了名为“jasonsaayman”的 npm 账户,并将其注册邮箱地址更改为他们控制的 Proton Mail 地址(“[email protected]”)。“plain-crypto-js”是由名为“nrwise”的 npm 用户使用邮箱地址“[email protected]”发布的。

据信,攻击者获得了该帐户的长期有效的经典 npm 访问令牌,从而控制了该帐户并直接向注册表发布了被污染的 Axios 版本。

嵌入式恶意软件则通过混淆的Node.js投放器(“setup.js”)启动,并根据操作系统的不同,设计为分支到三种攻击路径之一——

  • 在 macOS 系统上,它会运行一段 AppleScript 脚本,从外部服务器(“sfrclak.com:8000”)获取一个木马程序,将其保存为“/Library/Caches/com.apple.act.mond”,修改其权限使其可执行,并通过 /bin/zsh 在后台运行。执行完毕后,AppleScript 文件会被删除以掩盖痕迹。
  • 在 Windows 系统中,它会找到 PowerShell 二进制文件的路径,将其复制到“%PROGRAMDATA%\wt.exe”(伪装成 Windows 终端应用程序),并在临时目录中写入一个 Visual Basic 脚本 (VBScript) 并执行。该 VBScript 会联系同一服务器以获取 PowerShell 远程访问木马 (RAT) 脚本并执行。下载的文件随后会被删除。
  • 在其他平台(例如 Linux)上,投放器通过 Node.js 的 execSync 运行 shell 命令,从同一服务器获取 Python RAT 脚本,将其保存到“/tmp/ld.py”,并使用 nohup 命令在后台执行它。

StepSecurity表示:“每个平台都会向同一个C2 URL发送不同的POST请求体——packages.npm.org/product0(macOS)、packages.npm.org/product1(Windows)、packages.npm.org/product2(Linux)。这使得C2服务器能够针对单个端点提供适合该平台的有效负载。”

下载的 macOS 第二阶段二进制文件是一个 C++ 远程访问木马 (RAT),它会对系统进行指纹识别,并每 60 秒向远程服务器发送一次信标,以获取后续执行的命令。它支持运行其他有效载荷、执行 shell 命令、枚举文件系统以及终止自身等功能。

SafeDep 对 Linux 远程访问木马 (RAT) 的分析表明,它支持与 macOS 版本相同的命令。由于缺乏持久化机制,该恶意软件无法在系统重启后存活。这表明,此次攻击要么旨在快速窃取数据,要么利用 RAT 运行二进制文件和 shell 命令的能力来实现持久化。

SafeDep表示: “此次攻击的特点在于其克制性。Axios 的所有源文件均未被修改,因此传统的基于差异的代码审查方法很难发现它。恶意行为完全存在于一个传递依赖项中,由 npm 的 postinstall 生命周期自动触发。”

针对 Windows 的 PowerShell 远程访问木马 (RAT) 与 macOS 和 Linux 版本并无二致,它同样具备在内存中执行任意 DLL 文件、运行 PowerShell 命令、列出目录及其文件元数据以及优雅地自我终止等功能。与 macOS 和 Linux 版本不同的是,该 RAT 会创建一个名为“%PROGRAMDATA%\system.bat”的文件,其中包含一个下载脚本,每次登录时都会从服务器重新获取恶意软件,并在注册表中添加一个指向该批处理脚本的 Run 项。

Huntress 研究员 John Hammond表示: “在每个被入侵的主机上,远程访问木马 (RAT) 都会立即执行系统侦察:枚举用户目录、文件系统根目录和正在运行的进程,并将这些数据传输到 C2 服务器。该 RAT 会维持一个 60 秒的信标循环,随时准备接受进一步的命令,包括执行任意脚本和向内存中注入二进制文件。”

正如Elastic Security Labs指出的那样,此次攻击使用了同一远程访问木马(RAT)的三种并行实现——Windows版PowerShell、macOS版编译后的C++以及Linux版Python——这三种实现共享相同的C2协议、命令集、消息格式和运行行为。“这种一致性强烈表明,此攻击出自同一开发者或紧密协作的团队之手,且基于同一设计文档,”该公司表示。

一旦主有效载荷启动,Node.js 恶意软件还会采取以下措施执行三个取证清理步骤:从已安装的软件包目录中删除 postinstall 脚本,删除引用 postinstall 钩子以启动投放器的“package.json”,并将“package.md”重命名为“package.json”。

值得注意的是,“package.md”文件包含在“plain-crypto-js”包中,它是一个干净的“package.json”清单文件,不包含触发整个攻击的安装后钩子。切换包清单文件的目的是为了避免在感染后对包进行检查时引起任何警觉。

StepSecurity表示:“这两个恶意版本Axios本身都不包含任何恶意代码。相反,它们都注入了一个伪造的依赖项[email protected],这个包从未在Axios源代码中被导入,其唯一目的是运行一个安装后脚本,该脚本会部署一个跨平台的远程访问木马(RAT)。”

目前尚不清楚是谁破坏了供应链,但 Elastic 表示,通过“plain-crypto-js”安装后钩子提供的 macOS Mach-O 二进制文件与WAVESHAPER存在显著重叠,WAVESHAPER是一个 C++ 后门,上个月被谷歌旗下的 Mandiant 追踪到,并归咎于一个名为 UNC1069 的朝鲜威胁行为者。

建议用户执行以下操作以确定是否受到攻击-

  • 检查是否存在恶意 Axios 版本。
  • 检查 RAT 工件:“/Library/Caches/com.apple.act.mond”(macOS)、“%PROGRAMDATA%\wt.exe”(Windows)和“/tmp/ld.py”(Linux)。
  • 降级到 Axios 版本 1.14.0 或 0.30.3。
  • 从“node_modules”目录中删除“plain-crypto-js”。
  • 如果检测到 RAT 痕迹,则假定系统已被入侵,并轮换系统上的所有凭证。
  • 审核 CI/CD 流水线,找出安装了受影响版本的运行。
  • 阻止流向命令与控制域(“sfrclak[.]com”)的出站流量

Socket 在对此次攻击进行分析时表示,他们还发现了另外两个通过供应商依赖项分发相同恶意软件的软件包 -

对于“@shadanai/openclaw”软件包,它直接提供了恶意“plain-crypto-js”有效载荷(例如,@shadanai/openclaw/files/2026.3.31-1/dist/extensions/slack/node_modules/plain-crypto-js/setup.js)。另一方面,“@qqbrowser/[email protected]”软件包在其“node_modules/”文件夹中包含一个篡改过的“[email protected]”,其中注入了“plain-crypto-js”作为依赖项。

这家供应链安全公司表示: “真正的 axios 只有三个依赖项(follow-redirects、form-data 和 proxy-from-env)。添加 plain-crypto-js 显然是篡改。当 npm 处理这个 vendor 目录下的 axios 时,它会安装 plain-crypto-js,并触发相同的恶意安装后处理流程。”