一、事件概述

2026年3月30日,JavaScript生态遭遇重大供应链安全事件。StepSecurity监测发现,广受欢迎的HTTP客户端库 axios 在npm上被发布两个恶意版本:

  • axios@1.14.1

    — 针对现代1.x用户群

  • axios@0.30.4

    — 针对遗留0.x分支

攻击者通过 compromised 的axios核心维护者账号(jasonsaayman)手动发布恶意包,绕过正常的GitHub Actions CI/CD流程。这是针对npm top-10包的有史以来最复杂的供应链攻击之一。

二、攻击时间线

攻击经过精心策划,历时约18小时完成部署:

时间 (UTC)

事件

03-30 05:57

plain-crypto-js@4.2.0

发布 — 干净诱饵包,建立npm发布历史

03-30 23:59

plain-crypto-js@4.2.1

发布 — 植入恶意postinstall脚本

03-31 00:21

axios@1.14.1

发布 — 注入恶意依赖

03-31 01:00

axios@0.30.4

发布 — 39分钟后攻击0.x分支

关键特征:

- 恶意依赖提前18小时预置

- 三大操作系统预构建payload

- 双分支39分钟内连续命中

- 全程设计自毁机制

三、攻击技术深度解析

3.1 账号劫持与绕过机制

被攻击账号:

- 账号名:jasonsaayman(axios主要维护者)

- 篡改邮箱:ifstap@proton.me(攻击者控制)

- 攻击方式:获取长期有效的classic npm access token

绕过检测手法:

    // 合法版本特征 - OIDC可信发布者"_npmUser": { "name": "GitHub Actions", "email": "npm-oidc-no-reply@github.com", "trustedPublisher": { "id": "github", "oidcConfigId": "oidc:9061ef30-3132-49f4-b28c-9338d192a1a9" }}// 恶意版本特征 - 手动发布"_npmUser": { "name": "jasonsaayman", "email": "ifstap@proton.me" // 无trustedPublisher、无gitHead、无对应GitHub提交}

    关键发现:

    - axios@1.14.1在GitHub仓库中不存在对应的commit或tag

    - 仅存在于npm registry,是典型的"幽灵发布"

    - OIDC token无法被盗,攻击者必须获取长期token

    3.2 恶意依赖:plain-crypto-js

    伪装策略:

    属性

    伪装内容

    包名

    plain-crypto-js(仿冒crypto-js)

    描述

    "JavaScript library of crypto standards"

    作者

    Evan Vosberg(crypto-js原作者)

    仓库

    github.com/brix/crypto-js

    发布账号

    nrwise / nrwise@proton.me

    攻击载荷:

      { "name": "plain-crypto-js", "version": "4.2.1", "scripts": { "postinstall": "node setup.js" }}

      自毁机制:

      - 包含 package.md — 干净的package.json存根(版本4.2.0,无postinstall)

      - 执行后自动替换真实manifest,消除取证痕迹

      3.3 RAT投放器分析

      执行流程:

      npm install axios@1.14.1/0.30.4

      自动安装依赖 plain-crypto-js@4.2.1

      触发 postinstall: "node setup.js"

      执行混淆的JavaScript投放器

      连接C2服务器

      下载平台特定第二阶段payload

      执行RAT

      自毁:删除恶意文件 + 替换package.json为干净版本

      跨平台支持:

      - macOS 专用payload

      - Windows 专用payload

      - Linux 专用payload

      反取证特性:

      - 执行后自动删除自身

      - 替换package.json为干净诱饵

      - 开发者检查node_modules时无任何异常迹象

      四、影响范围评估

      4.1 axios生态地位

      指标

      数据

      周下载量

      3亿+

      npm排名

      Top 10

      使用场景

      React前端、CI/CD工具、服务端API等

      影响范围

      几乎所有Node.js/browser HTTP请求

      4.2 潜在受害场景

      高危场景:

      1. 开发者执行 npm installnpm update

      2. CI/CD流水线自动拉取最新依赖

      3. Docker镜像构建时安装依赖

      4. 生产环境自动部署脚本

      攻击后果:

      - 系统被植入远程访问木马(RAT)

      - 攻击者可完全控制受感染机器

      - 敏感代码、密钥、凭证泄露

      - 供应链下游项目被进一步污染

      五、IOC

      142.11.206.73:8000

      sfrclak.com

      http://sfrclak.com:8000/6202033

      nrwise@proton.me

      ifstap@proton.me

      六、检测与响应

      6.1 自查命令

        # 检查是否安装恶意版本npm list axios# 查看具体版本npm list axios --depth=0# 检查lock文件grep -A 5 ""axios"" package-lock.json | grep version# 检查plain-crypto-js依赖npm list plain-crypto-js

        6.2 感染确认

        如果安装了 axios@1.14.1 或 axios@0.30.4,请假设系统已被入侵!

        紧急响应步骤:

        1. 立即断开网络连接

        2. 隔离受感染机器

        3. 检查以下位置的异常:

        - ~/.npm/_cacache — npm缓存

        - node_modules/plain-crypto-js — 恶意依赖

        - 系统启动项和计划任务

        - 网络连接日志中的可疑C2通信

        4. 全盘杀毒扫描

        5. 轮换所有凭证(SSH密钥、API密钥、密码等)

        6. 从干净备份恢复或重装系统

        6.3 安全版本

        版本分支

        安全版本

        说明

        1.x

        ≤1.14.0 或 ≥1.14.2

        避开1.14.1

        0.x

        ≤0.30.3 或 ≥0.30.5

        避开0.30.4

        七、防护建议

        7.1 开发者层面

        1. 锁定依赖版本

          // package.json

          "dependencies": {

          "axios": "1.14.0" // 精确版本,不使用^或~

          }

        2. 使用lock文件

          确保 package-lock.json / yarn.lock / pnpm-lock.yaml 提交到版本控制

          CI/CD使用 npm ci 而非 npm install

        3. 启用依赖审计

          npm audit

          npm audit fix

        4. 使用私有registry或缓存

          Verdaccio等私有npm代理

          锁定依赖后不再自动更新

        7.2 企业层面

        1. 供应链安全工具

          StepSecurity Harden-Runner

          Socket.dev

          Snyk/Dependabot

          OSS-Fuzz

        2. CI/CD安全加固

          # GitHub Actions示例

          uses: step-security/harden-runner@v2

          with:

          egress-policy: block

          allowed-endpoints: |

          registry.npmjs.org:443

        3. 依赖审查流程

          所有依赖变更需人工审查

          监控新发布包的异常行为

          建立内部依赖白名单

        4. 应急响应预案

          快速定位受影响项目

          自动化依赖回滚机制

          凭证轮换流程

        7.3 开源维护者层面

        1. 启用MFA

          npm账号必须启用双因素认证

          使用硬件安全密钥

        2. 使用OIDC发布

          配置npm OIDC Trusted Publisher

          废弃classic access token

        3. 监控账号异常

          邮箱变更告警

          非常规时间和IP的发布告警

          手动发布告警(如通常使用CI/CD)

        4. 发布签名

          使用Sigstore/cosign签名发布包

          验证发布来源

        八、攻击者画像分析

        8.1 技术能力评估

        能力维度

        评估

        供应链理解

        深度理解npm生态和发布机制

        社会工程

        成功获取核心维护者凭证

        运营安全

        使用ProtonMail匿名邮箱

        跨平台开发

        预构建三大OS的payload

        反取证

        完善的自毁和伪装机制

        时间规划

        18小时精密部署,双分支覆盖

        8.2 攻击动机推测

        1. 经济动机

          窃取加密货币、API密钥、商业机密

        2. 间谍活动

          针对特定企业或组织的供应链渗透

        3. 勒索软件

          为后续大规模勒索做准备

        4. APT活动

          国家级攻击者的供应链武器化

        8.3 与历史事件对比

        事件

        时间

        相似点

        event-stream投毒

        2018

        恶意依赖注入

        ua-parser-js投毒

        2021

        账号劫持发布

        colors/faker破坏

        2022

        知名包被篡改

        axios投毒

        2026

        最复杂的运营级攻击

        九、行业影响与反思

        9.1 供应链安全现状

        1. 单点故障风险

          核心维护者账号成为攻击焦点

        2. 信任模型缺陷

          npm install = 执行任意代码

        3. 检测滞后性

          恶意版本存在数小时才被发现

        4. 修复成本高

          全球数百万项目需紧急响应

        9.2 改进方向

        1. 技术层面

          推广Sigstore签名验证

          强制OIDC发布机制

          依赖隔离和沙箱执行

        2. 流程层面

          建立供应链安全联盟

          共享威胁情报

          制定应急响应标准

        3. 生态层面

          核心项目多维护者机制

          资金和资源支持

          安全审计常态化

        十、总结

        axios npm投毒事件是2026年开源供应链安全的标志性事件,展现了攻击者日益精密的运营能力:

        关键发现:

        - 18小时精密策划,双分支覆盖

        - 跨平台RAT,完善的反取证机制

        - 针对npm top-10包的成功渗透

        - 利用长期access token绕过OIDC保护

        核心启示:

        1. 供应链安全已成为企业安全的薄弱环节

        2. 依赖自动更新策略需要重新评估

        3. 开源维护者账号保护刻不容缓

        4. 检测和响应能力需要持续提升

        紧急提醒:

        如果您或您的项目安装了 axios@1.14.1 或 axios@0.30.4,请立即假设系统已被入侵,执行应急响应流程,全面排查和修复。

        十一、参考链接

        1. StepSecurity官方报告

          https://www.stepsecurity.io/blog/axios-compromised-on-npm-malicious-versions-drop-remote-access-trojan

        2. axios GitHub Issue披露

          https://github.com/axios/axios/issues/10604

        3. StepSecurity AI Package Analyst - axios@0.30.4

          https://app.stepsecurity.io/oss-security-feed/axios?version=0.30.4

        4. StepSecurity AI Package Analyst - axios@1.14.1

          https://app.stepsecurity.io/oss-security-feed/axios?version=1.14.1

        5. StepSecurity Harden-Runner

          https://github.com/step-security/harden-runner

        6. npm OIDC Trusted Publishers文档

          https://docs.npmjs.com/generating-provenance-statements

        声明:本文基于StepSecurity公开披露的技术报告整理,仅供安全研究和防护参考。所有技术细节已做合规处理,不涉及具体漏洞利用代码或攻击工具分发。

        声明:本文来自奇安信威胁情报中心,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。