
2026 年 3 月 31 日,JavaScript 生态中使用最广泛的 HTTP 客户端组件之一 axios 遭遇严重供应链投毒,其 1.14.1 和 0.30.4 版本被植入恶意代码。攻击者通过入侵 axios 维护者的 NPM 账号(jasonsaayman),在官方发布的版本中引入了恶意依赖组件 plain-crypto-js,该组件是知名加密库 crypto-js 的仿冒包(typosquatting)。攻击采用两阶段策略:先于 3 月 30 日发布无害的 plain-crypto-js@4.2.0 建立可信记录,再于 31 日发布携带恶意载荷的 4.2.1 版本,随后利用被入侵账号先后发布 axios 的两个投毒版本,实现对 1.x 和 0.x 两大版本线用户的最大范围覆盖。当开发者安装受污染的 axios 时,plain-crypto-js 的 postinstall 钩子会自动从 C2 服务器下载对应平台(Windows/macOS/Linux)的恶意脚本,写入系统临时目录并静默执行,实现远程后门控制。axios 周下载量约1亿次,被数十万个项目直接或间接依赖,此次事件波及范围极为广泛,属于供应链投毒事件。
技术分析
axios 是一个基于 Promise 的 HTTP 客户端,支持浏览器和 Node.js 环境,提供了简洁的 API 用于发送 GET、POST 等请求,并支持拦截请求和响应、转换请求和响应数据、自动转换 JSON 数据、取消请求以及客户端防御 XSRF 等功能。它凭借开箱即用的特性和良好的跨平台兼容性,成为 JavaScript 生态中下载量最高的开源组件之一。
在 axios 组件 1.14.1 及 0.30.4 版本中,攻击者通过篡改 package.json 文件,在 dependencies 字段中植入了恶意依赖 "plain-crypto-js": "^4.2.1"。当开发者通过 npm install 安装受污染的 axios 版本时,NPM 会自动拉取并安装 plain-crypto-js@4.2.1。该恶意包的 package.json 中定义了 postinstall 钩子:"postinstall": "node setup.js",意味着包安装完成后会立即执行同目录下的 setup.js 脚本。
setup.js 经过高度混淆,解码后针对不同操作系统执行差异化攻击逻辑,所有载荷均从同一 C2 服务器下载(http://sfrclak[.]com:8000/6202033):
恶意载荷执行后会与 C2 服务器建立通信,接收攻击者下发的远程指令,实现远程控制能力,并可能进一步导致凭证窃取、持久化驻留及横向移动等后续攻击风险。攻击完成后,下载的恶意脚本会自删除以隐藏痕迹。此外,攻击者在发布恶意 axios 版本前约 24 小时,先发布了无风险的 plain-crypto-js@4.2.0 诱饵包,该版本完整复刻了合法 crypto-js 源码,未包含 postinstall 钩子,其唯一作用是在 NPM 上建立发布记录,避免该包在后续安全核查中显示为零发布记录的账号产物,从而绕过部分自动化安全检测机制。
注:在恶意版本暴露窗口内(约 3 小时)执行过安装、更新或构建流程,并解析到 axios 1.14.1 或 0.30.4 的直接或间接依赖项目,均应视为存在受影响风险。axios 作为 JavaScript 生态的“基础设施级”组件,被大量前端项目、Node.js 后端服务、构建工具及 CLI 工具广泛依赖,开发者应立即排查并回滚至安全版本。
axios (npm) == 0.30.4
axios (npm) == 1.14.1
plain-crypto-js (npm) == 4.2.1
axios@0.30.3 及以下历史稳定版本 axios@1.14.0
axios@0.30.5 及后续版本 axios@1.14.2 及后续版本
1. 恶意版本/依赖检测:
npm list axios 2>/dev/null | grep -E "1\.14\.1|0\.30\.4" && echo "AFFECTED"
npm list -g axios 2>/dev/null | grep -E "1\.14\.1|0\.30\.4" && echo "AFFECTED"
grep -A1 '"axios"' package-lock.json | grep -E "1\.14\.1|0\.30\.4" && echo "AFFECTED"
ls node_modules/plain-crypto-js 2>/dev/null && echo "AFFECTED"
2. 恶意载荷落地检测:
# macOS
ls -la /Library/Caches/com.apple.act.mond 2>/dev/null && echo "COMPROMISED"
# Linux
ls -la /tmp/ld.py 2>/dev/null && echo "COMPROMISED"
# Windows
dir "%PROGRAMDATA%\wt.exe" 2>nul && echo "COMPROMISED"
3. 可直接使用腾讯云安全中心的AI Agent安全、腾讯云主机安全的漏洞管理等模块进行快速精准排查。
1. 降级 axios 到安全版本(立即执行)
# 卸载恶意版本
npm uninstall axios
# 安装安全版本(1.14.0 或 0.30.3)
npm install axios@1.14.0
全局修复:
npm uninstall -g axios
npm install -g axios@1.14.0
2. 清理恶意依赖
# 删除 plain-crypto-js
rm -rf node_modules/plain-crypto-js
# 清理 npm 缓存
npm cache clean --force
# 重新安装(--ignore-scripts 阻止 postinstall 脚本执行)
npm ci --ignore-scripts
3. 清除已落地的恶意载荷
(1) Linux:
# 删除恶意脚本
rm -f /tmp/ld.py
# 检查是否有其他持久化痕迹
grep -r "sfrclak.com" /etc/cron* 2>/dev/null
grep -r "sfrclak.com" ~/.bashrc ~/.zshrc 2>/dev/null
(2) macOS:
# 删除恶意文件
rm -f /Library/Caches/com.apple.act.mond
# 检查启动项
launchctl list | grep -i com.apple.act
(3) Windows(以管理员身份运行 PowerShell):
# 删除恶意文件
Remove-Item "$env:PROGRAMDATA\wt.exe" -Force -ErrorAction SilentlyContinue
# 检查计划任务
Get-ScheduledTask | Where-Object {_.TaskName -like "*wt*"} | Unregister-ScheduledTask -Confirm:
腾讯云安全响应
腾讯云主机安全与云防火墙已于事件公开后第一时间完成检测规则、IOC 与恶意域名拦截策略更新,支持客户对受影响资产进行快速定位、风险处置及持续防护。
1. 腾讯云主机安全已支持Axios供应链投毒威胁的事前脆弱性风险检测、事后恶意请求自动拦截:


2. 腾讯云防火墙已支持对Axios供应链投毒威胁的事后恶意请求自动拦截:



END
更多精彩内容点击下方扫码关注哦~
关注云鼎实验室,获取更多安全情报
