朝阳博客

  • 首页
  • 文章
    • Article
    • Project
  • 源码
  • 前端开发
    • HTML+CSS
    • JavaScript
    • jQuery
    • Bootstrap
    • vue
    • uniapp
  • 后端开发
    • Java
    • NodeJs
    • PHP
  • 运维/系统
    • Linux
    • Windows
  • 数据库
    • MySQL
朝阳博客
一款专注于博客的响应式网站
  1. 首页
  2. 前端开发
  3. vue
  4. 正文

Axios 供应链投毒事件 - 服务器全面排查指南

2026年7月27日 1点热度 0人点赞 0条评论

Axios 供应链投毒事件 - 服务器全面排查指南

事件背景:2026年7月,axios 官方 npm 包被攻击者入侵,发布了 1.14.1 和 0.30.4 两个恶意版本。安装后会自动植入 plain-crypto-js@4.2.1 木马包,并在系统层面释放远控木马(RAT)。


目录

  • 一、核心威胁说明
  • 二、Linux / Debian 系统排查
    • 2.1 全盘搜索恶意依赖包
    • 2.2 搜索被污染的锁文件
    • 2.3 检查系统级木马文件
    • 2.4 检查可疑网络连接
    • 2.5 检查计划任务持久化
    • 2.6 使用应急扫描工具(推荐)
  • 三、Windows Server 系统排查
    • 3.1 检查系统级木马文件(最重要)
    • 3.2 全盘搜索恶意依赖包
    • 3.3 搜索被污染的锁文件
    • 3.4 指定目录快速扫描
    • 3.5 使用应急扫描工具(推荐)
  • 四、各包管理器检查命令速查
  • 五、发现中毒后的紧急处置
  • 六、入侵指标(IOC)汇总
  • 七、总结与建议

一、核心威胁说明

项目 详情
恶意 axios 版本 1.14.1、0.30.4(部分报道提及 0.30.3)
被植入的木马包 plain-crypto-js@4.2.1
恶意脚本行为 自动下载并安装远程访问木马(RAT)
受影响平台 Windows、macOS、Linux 全平台
安全版本 升级到 0.32.0、1.16.0 或更高版本

二、Linux / Debian 系统排查

前置条件:需要有 root 权限,或至少对项目目录有读取权限。

2.1 全盘搜索恶意依赖包

这是最核心的检测方式:如果 plain-crypto-js 文件夹存在,说明木马已落地。

# 全盘搜索(推荐,最彻底)
find / -name "plain-crypto-js" -type d 2>/dev/null | grep "node_modules"

# 如果项目集中在 /home、/var/www、/opt,可以只扫这些目录(更快)
find /home /var/www /opt -name "plain-crypto-js" -type d 2>/dev/null | grep "node_modules"

# 只搜索当前目录
find . -name "plain-crypto-js" -type d 2>/dev/null | grep "node_modules"

判断标准:

  • 有输出 → 存在木马包,已中毒
  • 无输出 → 未发现恶意包,暂时安全

2.2 搜索被污染的锁文件

检查项目中是否引用了恶意版本的 axios:

# 全盘搜索所有锁文件中的恶意版本
grep -rE '"axios":.*(1\.14\.1|0\.30\.4)' / --include="package-lock.json" --include="yarn.lock" --include="pnpm-lock.yaml" 2>/dev/null

# 指定常见目录搜索(更快)
grep -rE '"axios":.*(1\.14\.1|0\.30\.4)' /home /var/www /opt --include="package-lock.json" 2>/dev/null

判断标准:

  • 有输出 → 有项目的锁文件引用了毒版本,需进一步检查 node_modules 是否实际安装了
  • 无输出 → 锁文件没有毒版本记录

2.3 检查系统级木马文件

恶意脚本可能在系统目录释放后门,请务必检查以下路径:

# 检查常见的木马释放路径
ls -la /tmp/ld.py 2>/dev/null
ls -la /usr/lib/libsystemd.so 2>/dev/null

# 检查预加载配置文件(重要的后门检测点)
cat /etc/ld.so.preload 2>/dev/null

# 检查该文件指向的库是否正常
file /usr/local/lib/libsnoopy_history.so 2>/dev/null
strings /usr/local/lib/libsnoopy_history.so 2>/dev/null | grep -i snoopy

/etc/ld.so.preload 判断标准:

  • 正常(安全):指向常见系统库,如 /usr/lib/x86_64-linux-gnu/libeatmydata.so 或 Snoopy 审计工具
  • 危险(恶意):指向 /tmp/、/usr/local/lib/ 下的不常见名称,或包含进程隐藏相关字符串

2.4 检查可疑网络连接

木马通常会外联 C2 服务器,查看当前活跃的网络连接:

# 查看所有 ESTABLISHED 连接(排除本地回环)
netstat -antp | grep ESTABLISHED | grep -v "127.0.0.1"

# 或使用 ss 命令(新版系统推荐)
ss -antp | grep ESTABLISHED | grep -v "127.0.0.1"

判断标准:如果存在连接到陌生海外 IP(非数据库、非第三方服务),需高度警惕。


2.5 检查计划任务持久化

攻击者可能通过 cron 做持久化:

# 查看当前用户的 crontab
crontab -l

# 查看系统级 crontab
cat /etc/crontab

# 查看定时任务目录
ls -la /etc/cron.d/
ls -la /etc/cron.daily/
ls -la /etc/cron.hourly/

2.6 使用应急扫描工具(推荐)

官方发布的自动化扫描器,可一键完成上述所有检查:

# 安装
npm install -g axios-emergency-scanner

# 扫描全系统
axios-scan / --md

# 扫描并自动修复(升级 axios 到安全版本)
axios-scan / --md --fix

# 只扫描指定目录
axios-scan /home --md

备选工具(Bash 脚本):

git clone https://github.com/morph13nd/axios-compromise-scanner.git
cd axios-compromise-scanner
chmod +x shell.sh
./shell.sh /path/to/your/projects

三、Windows Server 系统排查

前置条件:需要管理员权限(Administrator)。

3.1 检查系统级木马文件(最重要)

恶意脚本会在 ProgramData 目录释放 wt.exe 远控木马:

# 检查木马文件是否存在
Test-Path "$env:PROGRAMDATA\wt.exe"

# 如果存在,查看文件详情
Get-ChildItem "$env:PROGRAMDATA\wt.exe" | Format-List *

判断标准:

  • 返回 False → 未发现系统级木马
  • 返回 True → 立即断网,服务器已被攻陷

3.2 全盘搜索恶意依赖包

方法一:扫描所有盘符(耗时较长)

Get-PSDrive -PSProvider FileSystem | ForEach-Object {
    Get-ChildItem -Path "$($_.Name):\" -Directory -Recurse -ErrorAction SilentlyContinue -Filter "plain-crypto-js"
} | Where-Object { $_.FullName -match "node_modules" }

方法二:只扫描特定盘符(推荐,更快)

# 只扫描 C 盘和 D 盘
Get-ChildItem -Path C:\,D:\ -Directory -Recurse -ErrorAction SilentlyContinue -Filter "plain-crypto-js" | Where-Object { $_.FullName -match "node_modules" }

# 只扫描 D 盘(如果项目都在数据盘)
Get-ChildItem -Path D:\ -Directory -Recurse -ErrorAction SilentlyContinue -Filter "plain-crypto-js" | Where-Object { $_.FullName -match "node_modules" }

3.3 搜索被污染的锁文件

# 全盘搜索所有锁文件中的恶意版本(较慢)
Get-PSDrive -PSProvider FileSystem | ForEach-Object {
    Get-ChildItem -Path "$($_.Name):\" -File -Recurse -ErrorAction SilentlyContinue -Filter "package-lock.json"
} | Select-String -Pattern '"axios":.*(1\.14\.1|0\.30\.4)'

# 只搜索常见项目目录(更快)
$targetPaths = @("D:\Projects", "D:\wwwroot", "C:\inetpub\wwwroot", "C:\Projects")
foreach ($path in $targetPaths) {
    if (Test-Path $path) {
        Get-ChildItem -Path $path -File -Recurse -ErrorAction SilentlyContinue -Filter "package-lock.json" | Select-String -Pattern '"axios":.*(1\.14\.1|0\.30\.4)'
    }
}

3.4 指定目录快速扫描

如果你知道项目存放在具体路径,可以用更精准的命令:

# 只扫描当前目录及其子目录
Get-ChildItem -Path . -Directory -Recurse -ErrorAction SilentlyContinue -Filter "plain-crypto-js" | Where-Object { $_.FullName -match "node_modules" }

# 扫描多个指定目录
$paths = @("D:\ProjectA", "D:\ProjectB", "C:\wwwroot")
foreach ($p in $paths) {
    Get-ChildItem -Path $p -Directory -Recurse -ErrorAction SilentlyContinue -Filter "plain-crypto-js" | Where-Object { $_.FullName -match "node_modules" }
}

3.5 使用应急扫描工具(推荐)

# 安装
npm install -g axios-emergency-scanner

# 扫描整个 C 盘(根据实际情况更换盘符)
axios-scan C:\ --md

# 扫描指定目录并自动修复
axios-scan D:\Projects --md --fix

四、各包管理器检查命令速查

检查当前项目或全局已安装的 axios 版本:

包管理器 检查项目依赖 检查全局依赖 说明
npm npm list axios --depth=0 npm list -g axios --depth=0 只看顶层依赖
cnpm cnpm list axios --depth=0 cnpm list -g axios 用法同 npm
yarn yarn list --depth=0 axios 或 yarn why axios yarn global list axios yarn why 会显示完整路径
pnpm pnpm list axios --depth=0 pnpm list -g axios

判断标准:版本号为 1.14.1、0.30.4 或 0.30.3 即为恶意版本,需立即升级。


五、发现中毒后的紧急处置

如果确认服务器已被感染,请按以下步骤操作:

第一步:立即断网

# Linux
ifdown eth0    # 或 systemctl stop network
# 或直接拔网线/关闭防火墙
ufw deny out

# Windows
# 在控制面板中禁用网络适配器,或执行:
netsh interface set interface "以太网" admin=disable

第二步:清理木马文件

Linux:

# 清空预加载文件(如果指向恶意库)
> /etc/ld.so.preload

# 删除恶意 .so 库文件
rm -f /path/to/malicious.so

# 删除可能残留的恶意脚本
rm -f /tmp/ld.py

# 清理计划任务中的恶意条目
crontab -e   # 手动编辑删除

Windows:

# 删除木马文件
Remove-Item "$env:PROGRAMDATA\wt.exe" -Force

# 检查并删除其他可疑文件
Get-ChildItem "$env:PROGRAMDATA\" -Filter "*.exe" | Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-30) }

第三步:清理并重装恶意依赖

# 删除 node_modules 和锁文件
rm -rf node_modules package-lock.json yarn.lock pnpm-lock.yaml

# 清除包管理器缓存
npm cache clean --force
yarn cache clean
pnpm store prune

# 使用安全版本重新安装
npm install axios@1.16.0
# 或
npm install axios@0.32.0

第四步:轮换敏感凭据

作为预防措施,建议轮换所有可能被泄露的凭据:

  • 服务器登录密码
  • SSH 密钥
  • API 密钥 / Token
  • 数据库密码
  • 云服务 Access Key

第五步:重装系统(如无法彻底清除)

如果木马已被植入内核级别或无法彻底清除,最安全的方案是备份数据后重装系统。


六、入侵指标(IOC)汇总

恶意 npm 包

类型 名称 版本
被污染的包 axios 1.14.1、0.30.4、0.30.3
被植入的木马包 plain-crypto-js 4.2.1

系统级木马文件路径

操作系统 路径
Windows %PROGRAMDATA%\wt.exe
macOS /Library/Caches/com.apple.act.mond
Linux /tmp/ld.py、/usr/lib/libsystemd.so(可疑)

恶意行为特征

  • 自动安装 plain-crypto-js 依赖
  • 在系统目录释放可执行文件(RAT)
  • 建立与 C2 服务器的网络连接
  • 可能通过 ld.so.preload(Linux)或计划任务(Windows)做持久化

七、总结与建议

  1. 核心检测指标:无论什么系统,plain-crypto-js 文件夹是否存在,是最直接的“中毒”判断标准。如果不存在,大概率安全。

  2. 系统层后门检查:不仅要查 npm 包,还要检查系统级的后门文件(wt.exe、ld.so.preload 等),这些才是攻击者真正长期控制的入口。

  3. 应急工具优先:官方发布的 axios-emergency-scanner 是最省心、最全面的排查方式,建议优先使用。

  4. 预防为主:

    • 定期检查 package-lock.json 中的依赖版本
    • 使用 npm audit 或 pnpm audit 检查已知漏洞
    • 在 CI/CD 中集成依赖安全扫描
    • 考虑使用私有 npm 镜像或 registry 代理
  5. 保持冷静:如果检测结果是安全的,不必过度恐慌。按流程排查完毕,确认无误后即可恢复正常运维。


免责声明:本文档仅供参考,具体操作请根据实际环境调整。如有疑问,建议咨询专业安全团队。


标签: 暂无
最后更新:2026年7月27日

aiyao

你要加油,你喜欢的人还没结婚。

点赞

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2021 zhaoyangweb.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

冀ICP备2021020018号-1