2026 年 3 月 30 日,npm 上超流行的 HTTP 客户端库 axios 遭遇严重供应链入侵,攻击者利用被盗维护者账号发布恶意版本,植入远程控制木马,波及 Windows、macOS、Linux 全平台。
- 查看详细情况:https://www.stepsecurity.io/blog/axios-compromised-on-npm-malicious-versions-drop-remote-access-trojan

严重程度:危急 (Critical)
受影响版本: axios@1.14.1, axios@0.30.4
安全版本: axios@1.14.0, axios@0.30.3
发现时间: 2026 年 3 月 30 日
攻击者: 劫持了主要维护者 jasonsaayman 的账户
核心摘要
全球最流行的 HTTP 客户端库 axios 遭遇了一起极其复杂且精心策划的供应链攻击。攻击者利用被泄露的维护者凭证,在 npm 上发布了两个恶意版本(1.14.1 和 0.30.4)。
这些版本本身不包含恶意代码,但注入了一个名为 plain-crypto-js@4.2.1 的幽灵依赖项。该依赖项通过 postinstall 脚本,在安装时自动释放并执行一个跨平台远程访问木马 (RAT),针对 macOS、Windows 和 Linux 系统。
关键特征:
- 隐蔽性极强:恶意脚本执行后会自我销毁,并用干净的配置文件覆盖证据,常规检查难以发现。
- 针对性强:预置了针对不同操作系统的专属负载,伪装成系统合法进程。
- 影响范围广:axios 周下载量超 3 亿,任何运行
npm install或npm update的用户均面临风险。
攻击深度解析
1. 攻击链条 (Kill Chain)
- 账户劫持:攻击者入侵了 axios 主要维护者的 npm 账户,将邮箱改为匿名 ProtonMail 地址 (
ifstap@proton.me),绕过了 GitHub Actions 的 OIDC 可信发布机制,手动发布恶意包。 - 预置陷阱:提前 18 小时发布了一个看似合法的诱饵包
plain-crypto-js@4.2.0,随后更新为包含恶意postinstall钩子的4.2.1版本。 - 注入依赖:在恶意 axios 版本中,强行添加
plain-crypto-js@^4.2.1为依赖项。注意:axios 源码中从未导入或使用过该包。 - 触发执行:用户安装 axios 时,npm 自动拉取恶意依赖并执行
node setup.js。 - 释放 RAT:脚本连接 C2 服务器 (
sfrclak.com:8000),根据操作系统下载并执行第二阶段负载。 - 毁灭证据:执行完毕后,删除
setup.js和包含钩子的package.json,替换为干净版本,使node_modules看起来完全正常。

2. 恶意行为详解
| 操作系统 | 持久化路径/文件名 | 伪装手法 | 执行方式 |
|---|---|---|---|
| macOS | /Library/Caches/com.apple.act.mond | 伪装成 Apple 活动监控守护进程 | 通过 AppleScript 后台静默执行 |
| Windows | %PROGRAMDATA%\wt.exe | 伪装成 Windows Terminal (wt.exe) | 通过 VBScript 调用隐藏 PowerShell |
| Linux | /tmp/ld.py | 伪装成普通 Python 脚本 | 通过 nohup 后台运行 |
C2 通信特征:
- 域名:
sfrclak.com - IP:
142.11.206.73 - 伪装流量:POST 请求体包含
packages.npm.org/productX,试图混淆为正常的 npm 流量。
立即行动指南
第一步:检测是否受影响
在你的项目根目录运行以下命令:
# 1. 检查 axios 版本
npm list axios 2>/dev/null | grep -E "1\.14\.1|0\.30\.4"
# 2. 检查是否存在幽灵依赖 (即使文件已被清理,目录可能仍在)
ls node_modules/plain-crypto-js 2>/dev/null && echo "⚠️ 警告:发现潜在感染痕迹!"
# 3. 检查系统是否已植入 RAT
# macOS
ls -la /Library/Caches/com.apple.act.mond 2>/dev/null && echo "🚨 严重:发现 macOS RAT!"
# Linux
ls -la /tmp/ld.py 2>/dev/null && echo "🚨 严重:发现 Linux RAT!"
# Windows (PowerShell)
if (Test-Path "$env:PROGRAMDATA\wt.exe") { Write-Host "🚨 严重:发现 Windows RAT!" }
第二步:紧急修复
如果你发现任何受影响迹象:
- 隔离机器:立即断开网络连接,防止数据外泄。
- 不要尝试原地清理:假设系统已完全被控。
- 重建环境:从已知干净的备份恢复系统,或重装操作系统。
- 轮换所有凭证:包括 npm token, AWS/GCP/Azure 密钥,SSH 私钥,数据库密码,CI/CD 变量等。
如果你未发现问题,但安装了受影响版本:
- 强制降级:
npm install axios@1.14.0 # 或者对于 0.x 用户 npm install axios@0.30.3 - 锁定版本:在
package.json中添加overrides(npm) 或resolutions(yarn) 防止自动升级回恶意版本。"overrides": { "axios": "1.14.0" } - 清理依赖:
rm -rf node_modules package-lock.json npm install --ignore-scripts
第三步:长期防御策略
- CI/CD 加固:
- 在所有
npm ci或npm install命令中添加--ignore-scripts标志,阻止postinstall脚本自动执行。 - 使用如 StepSecurity Harden-Runner 等工具,限制 GitHub Actions 的出站网络访问,仅允许白名单域名。
- 在所有
- 启用冷却期检查:
- 配置自动化工具,拒绝合并引入发布不足 24-48 小时的新版本 npm 包的 PR。
- 网络层拦截:
- 在防火墙或 DNS 层面封锁 C2 域名
sfrclak.com和 IP142.11.206.73。
- 在防火墙或 DNS 层面封锁 C2 域名
事件时间线 (UTC)
| 时间 | 事件 |
|---|---|
| 05:57 | 攻击者发布诱饵包 plain-crypto-js@4.2.0 |
| 23:59 | 攻击者更新为恶意包 plain-crypto-js@4.2.1 (植入 postinstall) |
| 00:21 (31 日) | 发布恶意 axios@1.14.1 (针对 1.x 用户) |
| 01:00 (31 日) | 发布恶意 axios@0.30.4 (针对 0.x 用户) |
| shortly after | StepSecurity AI 检测并披露威胁 |
反思
此次攻击展示了供应链攻击的最高水平:
- 身份窃取:绕过自动化 CI/CD,利用人工发布规避检测。
- 幽灵依赖:利用未被使用的依赖项触发恶意代码,极难通过代码审计发现。
- 自我清理:执行后销毁证据,让事后取证变得异常困难。
- 跨平台打击:一套代码覆盖三大主流操作系统。
给开发者的忠告:
永远不要盲目信任 npm install。在生产环境中,务必锁定依赖版本,禁用自动脚本执行,并采用零信任的网络策略。
安全无小事,立即检查你的
package.json!
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...















