【安全大事件】Axios 在 npm 仓库遭入侵,恶意版本植入跨平台远程控制木马
Axios(JavaScript主流HTTP客户端库,周下载量超3亿次)在npm仓库遭供应链攻击,攻击者劫持核心维护者账号,发布恶意版本并植入跨平台远程访问木马(RAT)。本次攻击仅针对特定版本,安全工程师需重点关注版本排查、恶意痕迹清理及系统加固,快速阻断攻击链路。 原文:https://www.stepsecurity.io/blog/axios-compromised-on-npm-malicious-versions-drop-remote-access-trojan
一、事件核心概述
axios(JavaScript主流HTTP客户端库,周下载量超3亿次)在npm仓库遭供应链攻击,攻击者劫持核心维护者账号,发布恶意版本并植入跨平台远程访问木马(RAT)。本次攻击仅针对特定版本,安全工程师需重点关注版本排查、恶意痕迹清理及系统加固,快速阻断攻击链路。
二、受影响版本(核心重点)
本次攻击仅涉及axios两个特定版本,无其他版本受影响,具体如下:
- 高危受影响版本:axios@1.14.1(1.x分支,针对新版本用户)、axios@0.30.4(0.x分支,针对旧版本用户)
- 安全版本:所有低于1.14.1的1.x版本(如1.14.0及以下)、所有低于0.30.4的0.x版本(如0.30.3及以下),以及官方后续发布的修复版本
- 关联恶意依赖:恶意axios版本会强制拉取plain-crypto-js@4.2.1(攻击者预置的恶意依赖,用于投放RAT)
三、快速排查方案(安全工程师实操)
排查核心:确认系统/项目中是否存在受影响axios版本及关联恶意依赖,分3个维度实操,优先排查生产环境、CI/CD节点及开发环境。
3.1 项目依赖排查(最直接)
针对所有Node.js项目,执行以下命令快速检测,无需复杂工具:
# 1. 查看当前项目axios版本(直接定位是否受影响)
npm list axios
yarn list axios # 若使用yarn管理
# 2. 查看是否存在恶意依赖plain-crypto-js@4.2.1
npm list plain-crypto-js
yarn list plain-crypto-js
# 3. 批量排查服务器所有Node.js项目(适用于多项目部署场景)
find /path/to/projects -name "package.json" -exec grep -l '"axios": "' {} \; | xargs -I {} sh -c 'echo "项目路径: {}"; cat {} | grep -A 1 "axios"'
排查判定标准:只要输出结果中包含axios@1.14.1、axios@0.30.4,或plain-crypto-js@4.2.1,即判定为受影响。
3.2 系统层面排查(检测RAT植入痕迹)
恶意版本会通过postinstall钩子投放RAT,不同系统痕迹不同,重点排查以下路径和进程(对应RAT持久化位置):
- macOS系统:
- 排查路径:/Library/Caches/com.apple.act.mond(伪装系统缓存的RAT文件)
- 排查命令:ls -la /Library/Caches/com.apple.act.mond; ps aux | grep com.apple.act.mond
- Windows系统:
- 排查路径:%PROGRAMDATA%\wt.exe(伪装Windows终端的RAT相关文件)、%TEMP%\6202033.ps1(临时RAT脚本)
- 排查命令:dir %PROGRAMDATA%\wt.exe; tasklist | findstr "wt.exe"; dir %TEMP%\6202033.ps1
- Linux系统:
- 排查路径:/tmp/ld.py(Python版RAT脚本)
- 排查命令:ls -la /tmp/ld.py; ps aux | grep python3.*ld.py
3.3 网络层面排查(阻断C2通信)
恶意RAT会与C2服务器通信,需排查是否有出站流量指向以下地址,同时在防火墙/IPS中阻断:
# C2服务器地址(核心阻断目标)
http://sfrclak.com:8000/6202033
# 排查服务器出站流量(以Linux为例)
netstat -an | grep sfrclak.com
ss -an | grep 8000
grep "sfrclak.com" /var/log/nginx/access.log # 若有Web服务,排查日志
四、修复与处置方案(优先级:紧急处置→彻底修复→长期加固)
4.1 紧急处置(立即执行,阻断攻击)
针对已排查出的受影响节点,优先执行以下操作,快速停止恶意行为:
- 终止恶意进程:
- macOS:kill -9 $(ps aux | grep com.apple.act.mond | grep -v grep | awk '{print $2}')
- Windows:taskkill /f /im wt.exe; taskkill /f /im powershell.exe(若关联RAT进程)
- Linux:kill -9 $(ps aux | grep python3.*ld.py | grep -v grep | awk '{print $2}')
- 删除恶意文件:
- macOS:rm -f /Library/Caches/com.apple.act.mond
- Windows:del /f %PROGRAMDATA%\wt.exe; del /f %TEMP%\6202033.ps1
- Linux:rm -f /tmp/ld.py
- 临时阻断C2通信:在防火墙、IPS中添加规则,禁止所有节点访问sfrclak.com及8000端口。
4.2 彻底修复(清除依赖层面恶意文件)
紧急处置后,修复项目依赖,彻底清除恶意包体,避免重启后复发:
# 1. 卸载受影响axios版本及恶意依赖
npm uninstall axios plain-crypto-js
yarn remove axios plain-crypto-js
# 2. 安装安全版本(根据项目适配选择)
# 1.x分支用户(推荐,稳定且无漏洞)
npm install axios@1.14.0
# 0.x分支用户(需兼容旧代码)
npm install axios@0.30.3
# 3. 清理npm缓存,避免缓存中的恶意包被重新安装
npm cache clean --force
yarn cache clean
# 4. 验证修复结果(确认无恶意版本)
npm list axios plain-crypto-js
补充说明:若项目依赖锁定文件(package-lock.json、yarn.lock)中存在受影响版本,需手动删除锁定文件后重新安装,确保依赖树纯净。
4.3 长期加固(防范同类供应链攻击)
结合本次攻击特征,安全工程师需从3个层面加固,避免再次遭遇类似攻击:
- 依赖管理加固:
- 使用npm audit、snyk等工具定期扫描项目依赖,检测恶意包或漏洞包;
- 锁定依赖版本(在package.json中指定具体版本号,避免^、~等模糊版本);
- 禁止项目自动安装未知依赖,CI/CD流程中添加依赖校验步骤。
- 账号与权限加固:
- 排查团队内部npm账号,删除长期访问令牌,改用OIDC可信发布机制(如GitHub Actions OIDC);
- 给npm账号启用双因素认证(2FA),避免账号被劫持;
- 限制核心依赖包的维护者权限,减少账号泄露风险。
- 监控与应急加固:
- 监控npm仓库中核心依赖的版本更新,若出现非官方发布的异常版本,立即排查;
- 在服务器部署EDR工具,监控异常进程、文件写入及出站流量,及时发现RAT等恶意程序;
- 建立供应链攻击应急流程,明确排查、处置、复盘的步骤,提升响应效率。
五、关键提醒
- 本次攻击的恶意版本具有自清理机制,setup.js执行后会删除自身及相关痕迹,若排查时未发现恶意文件,不代表未被入侵,需结合版本排查结果确认。
- 若生产环境使用受影响版本,修复前需做好备份,避免影响业务正常运行;修复后需重启相关服务,确保恶意进程彻底终止。
- 持续关注axios官方公告,若官方发布新版本(如1.14.2、0.30.5),优先升级至官方修复版本,避免使用非官方镜像源安装。