
安全研究机构 Socket 于 3 月 31 日检测到 npm 核心套件 axios 遭受活跃的供应链攻击。攻击者入侵 axios 首席维护者 jasonsaayman 的 npm 账号,发布恶意版本并注入恶意依赖包,用于投放跨平台远程访问木马(RAT),目标攻击 macOS、Windows 和 Linux 系统。
(来源:Socket)
此次事件是一次精心策划的多步供应链攻击。攻击者首先入侵维护者账号,将邮箱更改为 ifstap@proton.me,然后利用被盗的 npm 访问凭证手动发布恶意版本,完全绕过了 axios 正规的 GitHub Actions + OIDC Trusted Publisher 发布流程。两个恶意版本在 GitHub 仓库中均无对应的提交、标签或发布记录。
攻击者的准备工作同样精密:控制另一个账号(nrwise,nrwise@proton.me)在约 18 小时前先发布了干净的诱饵版本 plain-crypto-js@4.2.0 以建立历史记录,再于 3 月 30 日 23:59 UTC 发布了恶意的 4.2.1 版本。
恶意 postinstall hook 执行后,RAT 投放器(setup.js)连接至命令与控制服务器 sfrclak[.]com:8000 投放平台特定载荷,执行完毕后自毁并替换 package.json 为干净存根,使得事后检查 node_modules 目录无法发现感染痕迹。
恶意套件版本:axios@1.14.1、axios@0.30.4、plain-crypto-js@4.2.1
C2 服务器:sfrclak[.]com / 142.11.206.73 / [.]com:8000
macOS 感染痕迹:/Library/Caches/com.apple.act.mond
Windows 感染痕迹:%PROGRAMDATA%\wt.exe、%TEMP%\6202033.vbs
Linux 感染痕迹:/tmp/ld.py
攻击者账号:jasonsaayman(已被入侵)、nrwise(攻击者创建账号)
由于恶意投放器在执行后自毁,无法靠检查 node_modules 目录确认感染。正确方法是直接检查 lockfile(package-lock.json 或 yarn.lock)是否包含 axios@1.14.1 或 axios@0.30.4 的版本记录。
安全版本回退:1.x 用户降至 axios@1.14.0;0.x 用户降至 axios@0.30.3,并同步从 node_modules 移除 plain-crypto-js 目录后重新安装依赖。
若系统中发现任何 RAT 感染痕迹(com.apple.act.mond、wt.exe、ld.py),切勿尝试就地清除,应从已知正常状态重新建置,并立即轮换所有可能暴露的凭证,包括 npm 令牌、AWS 访问密钥、SSH 私钥、CI/CD 配置密钥和 .env 文件值。
对于加密货币和 Web3 开发者而言,axios 是许多 DeFi 协议前端、加密资产管理工具和链上数据查询服务的核心 HTTP 库。受感染的开发环境可能导致钱包私钥、助记词或 API 密钥泄露给攻击者,建议优先审查并轮换所有敏感凭证。
由于恶意投放器在执行后自毁,不能靠 node_modules 目录确认感染。应直接检查 lockfile 是否含有 axios@1.14.1 或 axios@0.30.4 的记录,并确认 node_modules 中是否存在 plain-crypto-js 目录。可执行 npm list axios 或直接搜索 lockfile 中的版本字符串。
axios 是 Web3 前端应用程序和 DeFi 协议界面的常用 HTTP 库。受感染的开发环境可能使私钥、助记词、交易所 API 密钥或 CI/CD 配置等敏感凭证暴露给攻击者,相关开发者应优先审查并轮换所有可能暴露的加密相关凭证。
主要预防措施包括:在 CI/CD 中始终使用 npm ci --ignore-scripts 禁用 postinstall hook;对关键依赖包实施版本固定;定期审查 lockfile 的变更记录;以及部署 Socket、Aikido 等工具进行依赖包的即时恶意软件监控。