事件概述

基本信息

项目

详情

受影响包

axios (最受欢迎的 JavaScript HTTP 客户端库,每周下载量超过1亿次)

恶意版本axios@1.14.1

axios@0.30.4

攻击向量

劫持 axios 主要维护者 jasonsaayman 的 npm 账户

恶意依赖plain-crypto-js@4.2.1
C2服务器sfrclak.com:8000

(IP: 142.11.206.73)

暴露窗口

约2小时53分钟 (1.14.1) / 2小时15分钟 (0.30.4)

攻击时间线

时间 (UTC)

事件

2026-03-30 05:57

plain-crypto-js@4.2.0

发布 (干净诱饵版本,建立发布历史)

2026-03-30 23:59

plain-crypto-js@4.2.1

发布 (包含恶意载荷)

2026-03-31 00:21

axios@1.14.1

发布 (注入恶意依赖)

2026-03-31 01:00

axios@0.30.4

发布 (39分钟后,同时攻击0.x分支)

2026-03-31 03:15

npm 下架恶意版本

攻击技术详情

1. 账户劫持与权限获取

攻击者通过未知方式获取了 axios 主要维护者 jasonsaayman 的长期有效 npm 访问令牌,并将账户邮箱更改为 ifstap@proton.me

关键取证指标:

// 合法版本 (axios@1.14.0) - 通过 GitHub Actions OIDC 发布

"_npmUser": {

"name": "GitHub Actions",

"email": "npm-oidc-no-reply@github.com",

"trustedPublisher": {

"id": "github",

"oidcConfigId": "oidc:9061ef30-3132-49f4-b28c-9338d192a1a9"

}

}

// 恶意版本 (axios@1.14.1) - 手动发布,无 OIDC 绑定

"_npmUser": {

"name": "jasonsaayman",

"email": "ifstap@proton.me"

// 无 trustedPublisher,无 gitHead

}

2. 依赖注入攻击

攻击者仅修改了 package.json,添加了一个从未在 axios 源码中导入的依赖:

--- axios/package.json (1.14.0)

+++ axios/package.json (1.14.1)

- "version": "1.14.0",

+ "version": "1.14.1",

"dependencies": {

"follow-redirects": "^2.1.0",

"form-data": "^4.0.1",

"proxy-from-env": "^2.1.0",

+ "plain-crypto-js": "^4.2.1"

}

3. 恶意依赖结构 (plain-crypto-js)

文件

4.2.0 (诱饵)

4.2.1 (恶意)

变化说明

package.json

无 scripts 段

添加 "postinstall": "node setup.js"

添加武器

setup.js

不存在

4.2KB 混淆投递器

核心恶意代码

package.md

不存在

干净 JSON stub (版本显示 4.2.0)

反取证替换

4. RAT 投递器 (setup.js) 技术细节

双层混淆方案
  1. _trans_1(x, r)

    XOR 加密,密钥 "OrDeR_7077"

  2. _trans_2(x, r)

    字符串反转 + Base64 解码 + _trans_1

C2 通信特征
  • URL

    http://sfrclak.com:8000/6202033

  • POST 数据

    (按平台区分)

    • macOS: packages.npm.org/product0

    • Windows: packages.npm.org/product1

    • Linux: packages.npm.org/product2

  • 伪装

    使用 packages.npm.org/ 前缀模仿 npm 注册表流量

5. 平台特定载荷投递

平台

投递路径

技术特点

macOS/Library/Caches/com.apple.act.mond

AppleScript + osascript,伪装 Apple 系统守护进程

Windows%PROGRAMDATA%\\wt.exe

+ %TEMP%\\6202033.ps1/.vbs

VBScript 调用 PowerShell,创建持久化 PowerShell 副本

Linux/tmp/ld.py

Python 后门,curl 下载执行

6. 反取证技术

  1. 自删除

    执行后删除 setup.js 本身

  2. 文件替换

    用干净的 package.md 替换 package.json

  3. 版本欺骗

    替换后的 package.json 显示版本为 4.2.0 (而非 4.2.1)

  4. 进程分离

    使用 nohup& 将进程脱离 npm 进程树

  5. 静默失败

    所有错误被捕获并静默处理,npm install 始终返回成功

LABYRINTH CHOLLIMA 组织背景

组织档案

属性

详情

主要别名

Gleaming Pisces, AppleJeus, Nickel Academy, Hidden Cobra, Citrine Sleet, UNC4736

上级组织

Lazarus Group

活跃时间

至少2018年至今

主要目标

制造业、物流、国防、航空航天、加密货币平台

攻击动机

间谍活动、破坏性攻击、经济利益

已知攻击技术 (TTPs)

  • 供应链攻击

    VMConnect、Operation Brainleeches、3CX 攻击

  • 恶意软件

    LightlessCan, KandyKorn, SugarLoader, Hloader, PondRAT, PoolRAT

  • 社会工程

    Operation Dream Job (虚假招聘)

  • 加密货币盗窃

    长期针对交易所和个人钱包

相似点对比分析

1. 供应链攻击手法

维度

LABYRINTH CHOLLIMA (历史活动)

axios 攻击

攻击目标

开源包管理器 (PyPI/npm)

npm (axios)

代表性活动

VMConnect、Operation Brainleeches

axios 供应链攻击

投递方式

恶意包/依赖注入

依赖注入 (plain-crypto-js)

受害者类型

开发者、CI/CD 环境

开发者、CI/CD 环境

2. 预部署与信任建立策略

LABYRINTH CHOLLIMA VMConnect 活动:

  • 先发布干净包建立发布历史和信任

  • 后续更新版本植入恶意代码

axios 攻击:

  • 提前18小时发布 plain-crypto-js@4.2.0 (干净诱饵)

  • 随后发布 plain-crypto-js@4.2.1 (恶意载荷)

相似度: ⭐⭐⭐⭐⭐ (高度相似)

3. 多平台载荷投递

LABYRINTH CHOLLIMA:

  • PondRAT: macOS/Linux 后门

  • PoolRAT/SimpleSea: Linux 变种

axios 攻击:

  • macOS: AppleScript 投递 Mach-O 二进制

  • Windows: VBScript + PowerShell 投递

  • Linux: Python 后门投递

相似度: ⭐⭐⭐⭐⭐ (高度相似)

4. 反取证技术对比

技术

LABYRINTH CHOLLIMA

axios 攻击

多阶段加密

✅ 多层加密载荷

✅ 双层字符串混淆

文件清理

✅ 删除临时文件

✅ 删除 setup.js 和恶意 package.json

代码混淆

✅ 高度混淆

✅ XOR + Base64 双层混淆

版本欺骗

⚠️ 部分活动

✅ package.json 版本号欺骗

进程隐藏

✅ 进程注入/隐藏

✅ nohup 进程分离

5. 操作安全 (OPSEC)

特征

LABYRINTH CHOLLIMA

axios 攻击

邮箱服务

ProtonMail 等加密邮箱

ifstap@proton.me, nrwise@proton.me

账户劫持

常见维护者账户接管

jasonsaayman 账户劫持

快速撤回

短期暴露后撤回

✅ 约2-3小时后撤回

归因分析

归因依据

1. 技术特征重叠

根据 ReversingLabs、CrowdStrike 的研究:

  • VMConnect 活动归因

    ReversingLabs 将 VMConnect 供应链攻击以高置信度归因于 Labyrinth Chollima

  • 代码结构相似

    axios 攻击中的载荷解密和执行链与 VMConnect 活动高度相似

  • 包命名策略

    模仿合法包的命名方式与 Operation Brainleeches 一致

2. 归因置信度评估

指标

评分

说明

TTPs 匹配

预部署、多平台载荷、反取证技术

代码相似性

混淆技术和载荷结构与历史活动一致

基础设施

中-高

ProtonMail、C2 通信模式

目标一致性

开发者、供应链、加密货币

整体置信度

多家安全公司类似归因

IOCs (攻击指标)

恶意包哈希

包名

版本

SHA-256

axios

1.14.1

2553649f2322049666871cea80a5d0d6adc700ca

axios

0.30.4

d6f3f62fd3b9f5432f5782b62d8cfd5247d5ee71

plain-crypto-js

4.2.1

07d889e2dadce6f3910dcbc253317d28ca61c766

setup.js

-

e10b1fa84f1d6481625f741b69892780140d4e0e7769e7491e5f4d894c2e0e09

网络指标

类型

C2 域名

sfrclak.com

C2 IP

142.11.206.73

C2 URL

http://sfrclak.com:8000/6202033

C2 端口

8000

文件系统指标

macOS
/Library/Caches/com.apple.act.mond

/tmp/6202033
Windows
%PROGRAMDATA%\\wt.exe

%TEMP%\\6202033.vbs

%TEMP%\\6202033.ps1
Linux
/tmp/ld.py

攻击者账户

账户

邮箱

角色

jasonsaayman

ifstap@proton.me

被劫持的 axios 维护者

nrwise

nrwise@proton.me

恶意包发布者

相关恶意包

包名

描述

@shadanai/openclaw

包含 vendored 的 plain-crypto-js

@qqbrowser/openclaw-qbot@0.0.130

包含篡改的 axios@1.14.1

检测与防御建议

立即检查步骤

# 1. 检查恶意 axios 版本

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"

# 2. 检查 plain-crypto-js 存在

ls node_modules/plain-crypto-js 2>/dev/null && echo "POTENTIALLY AFFECTED"

# 3. 检查 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>/dev/null && echo COMPROMISED

修复步骤

# 1. 降级到安全版本

npm install axios@1.14.0 # 1.x 用户

npm install axios@0.30.3 # 0.x 用户

# 2. 添加 overrides 阻止恶意版本

{

"dependencies": { "axios": "1.14.0" },

"overrides": { "axios": "1.14.0" },

"resolutions": { "axios": "1.14.0" }

}

# 3. 移除恶意依赖

rm -rf node_modules/plain-crypto-js

npm install --ignore-scripts

长期防御措施

  1. 使用 --ignore-scripts
    npm ci --ignore-scripts
  2. 设置最小包年龄
    npm config set min-release-age 3 # 阻止3天内发布的包
  3. 验证 OIDC 来源
    • 检查 npm 发布是否通过 GitHub Actions OIDC

    • 手动发布 (无 trustedPublisher) 应视为高风险

  4. 监控幽灵依赖
    • 检查 package.json 中从未导入的依赖

    • 使用工具扫描未使用的依赖项

  5. CI/CD 安全
    • 在 CI/CD 中默认启用 --ignore-scripts

    • 使用 egress 防火墙限制出站连接

    • 监控异常网络活动

  6. 凭证轮换
    • 如果发现感染,立即轮换所有凭证

    • npm tokens、AWS 密钥、SSH 密钥、云凭证等

参考来源

  1. StepSecurity - axios Compromised on npm

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

  2. Snyk - Axios npm Package Compromised

    https://snyk.io/blog/axios-npm-package-compromised-supply-chain-attack-delivers-cross-platform/

  3. ReversingLabs - VMConnect Supply Chain Campaign

    https://www.reversinglabs.com/blog/vmconnect-supply-chain-campaign-continues

  4. Elastic Security Labs - Inside the Axios supply chain compromise

    https://www.elastic.co/security-labs/axios-one-rat-to-rule-them-all

  5. MITRE ATT&CK - Lazarus Group

    https://attack.mitre.org/groups/G0032/

  6. CrowdStrike - Labyrinth Chollima Analysis

    https://cyberscoop.com/north-korea-labyrinth-chollima-splits-crowdstrike/

  7. Socket - Supply Chain Attack on Axios

    https://socket.dev/blog/axios-npm-package-compromised

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