事件概述
基本信息
项目 | 详情 |
|---|---|
| 受影响包 | axios (最受欢迎的 JavaScript HTTP 客户端库,每周下载量超过1亿次) |
| 恶意版本 | axios@1.14.1和 |
| 攻击向量 | 劫持 axios 主要维护者 |
| 恶意依赖 | 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 段 | 添加 | 添加武器 |
setup.js | 不存在 | 4.2KB 混淆投递器 | 核心恶意代码 |
package.md | 不存在 | 干净 JSON stub (版本显示 4.2.0) | 反取证替换 |
4. RAT 投递器 (setup.js) 技术细节
双层混淆方案
- _trans_1(x, r)
XOR 加密,密钥
"OrDeR_7077" - _trans_2(x, r)
字符串反转 + Base64 解码 + _trans_1
C2 通信特征
- URL
http://sfrclak.com:8000/6202033 - POST 数据
(按平台区分)
macOS:
packages.npm.org/product0Windows:
packages.npm.org/product1Linux:
packages.npm.org/product2- 伪装
使用
packages.npm.org/前缀模仿 npm 注册表流量
5. 平台特定载荷投递
平台 | 投递路径 | 技术特点 |
|---|---|---|
| macOS | /Library/Caches/com.apple.act.mond | AppleScript + osascript,伪装 Apple 系统守护进程 |
| Windows | %PROGRAMDATA%\\wt.exe+ | VBScript 调用 PowerShell,创建持久化 PowerShell 副本 |
| Linux | /tmp/ld.py | Python 后门,curl 下载执行 |
6. 反取证技术
- 自删除
执行后删除
setup.js本身 - 文件替换
用干净的
package.md替换package.json - 版本欺骗
替换后的 package.json 显示版本为 4.2.0 (而非 4.2.1)
- 进程分离
使用
nohup和&将进程脱离 npm 进程树 - 静默失败
所有错误被捕获并静默处理,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 等加密邮箱 | ✅ |
| 账户劫持 | 常见维护者账户接管 | ✅ |
| 快速撤回 | 短期暴露后撤回 | ✅ 约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/6202033Windows
%PROGRAMDATA%\\wt.exe%TEMP%\\6202033.vbs%TEMP%\\6202033.ps1Linux
/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 工件# macOSls -la /Library/Caches/com.apple.act.mond 2>/dev/null && echo "COMPROMISED"# Linuxls -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-jsnpm install --ignore-scripts长期防御措施
- 使用 --ignore-scripts
npm ci --ignore-scripts - 设置最小包年龄
npm config set min-release-age 3 # 阻止3天内发布的包 - 验证 OIDC 来源
检查 npm 发布是否通过 GitHub Actions OIDC
手动发布 (无 trustedPublisher) 应视为高风险
- 监控幽灵依赖
检查 package.json 中从未导入的依赖
使用工具扫描未使用的依赖项
- CI/CD 安全
在 CI/CD 中默认启用
--ignore-scripts使用 egress 防火墙限制出站连接
监控异常网络活动
- 凭证轮换
如果发现感染,立即轮换所有凭证
npm tokens、AWS 密钥、SSH 密钥、云凭证等
参考来源
StepSecurity - axios Compromised on npm
https://www.stepsecurity.io/blog/axios-compromised-on-npm-malicious-versions-drop-remote-access-trojan
Snyk - Axios npm Package Compromised
https://snyk.io/blog/axios-npm-package-compromised-supply-chain-attack-delivers-cross-platform/
ReversingLabs - VMConnect Supply Chain Campaign
https://www.reversinglabs.com/blog/vmconnect-supply-chain-campaign-continues
Elastic Security Labs - Inside the Axios supply chain compromise
https://www.elastic.co/security-labs/axios-one-rat-to-rule-them-all
MITRE ATT&CK - Lazarus Group
https://attack.mitre.org/groups/G0032/
CrowdStrike - Labyrinth Chollima Analysis
https://cyberscoop.com/north-korea-labyrinth-chollima-splits-crowdstrike/
Socket - Supply Chain Attack on Axios
https://socket.dev/blog/axios-npm-package-compromised
声明:本文来自奇安信威胁情报中心,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。