主流 JavaScript 库 Axios 遭劫持,npm 被恶意注入远程控制木马

fmt

Axios npm包遭恶意注入事件分析

事件概述

安全研究机构 StepSecurity 报告称,主流 JavaScript 库 Axios 的两个 npm 版本(axios@1.14.1axios@0.30.4)被植入远程控制木马。攻击者通过劫持核心维护者账号,注入恶意依赖包,导致开发者安装时自动执行恶意脚本。

攻击手段与过程

  1. 账号劫持:黑客非法获取 Axios 核心维护者 jasonsaayman 的 npm 账号,将绑定邮箱替换为匿名的 ProtonMail,绕过正常的 GitHub Actions 自动化流程,手动发布被污染版本到 npm。
  2. 虚假依赖包注入:未直接修改 Axios 源码,而是通过注入虚假依赖包 plain-crypto-js@4.2.1 实现攻击。该包在 Axios 中从未被引用,仅通过 postinstall 脚本在安装时触发恶意代码执行。
  3. 伪装策略:攻击者提前 18 小时发布 plain-crypto-js@4.2.0(干净版本)打掩护,随后在 4.2.0 基础上发布恶意的 4.2.1 版本,避免被安全工具识别为“全新可疑包”。

恶意代码行为

当开发者执行 npm install axios 时,plain-crypto-js@4.2.1 被自动安装,触发 postinstall 脚本执行 setup.js,核心恶意行为包括:

  • 连接远程服务器:下载隐藏的恶意程序(如 wt.exeld.py 等)。
  • 系统隐藏执行
    • macOS:下载程序到 /Library/Caches/com.apple.act.mond,伪装系统文件后台运行。
    • Windows:通过 where powershell 定位路径,复制到 %PROGRAMDATA%\wt.exe,伪装为终端程序运行隐藏脚本。
    • Linux:通过 Node.js 的 execSync 执行 /tmp/ld.py,并以 nohup 后台运行。
  • 自我清理:攻击完成后删除 setup.jspackage.json,用纯净版本替换,掩盖痕迹。

防范与应对措施

  1. 检测方法
    • 执行 npm list axios 检查 Axios 版本。
    • 检查 node_modules/plain-crypto-js 是否存在异常依赖。
  2. 应急处理:若设备感染,需重装系统,更换 npm token、云服务密钥、SSH Key 等凭证,并检查 CI/CD 流水线。

核心教训

攻击者利用 npm 生态中开发者对核心包维护者的信任,通过账号劫持和虚假依赖包绕过安全检测,暴露了开源生态中“单一维护者”和“依赖注入”的安全风险。建议开发者关注依赖包的来源和完整性,及时更新工具链并加强凭证管理。 fmt 一站式数字化解决方案服务商 —— 专业提供软件开发、网站设计、APP 与小程序开发,搭载低费率支付通道,结合创意广告设计,助力企业全链路数字化升级。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部