文章总结: 文档分析了2026年3月发生的axiosnpm供应链攻击事件,攻击者通过劫持维护者账户发布恶意版本(1.14.1/0.30.4)并注入plain-crypto-js依赖,采用双层混淆、多平台载荷投递和反取证技术。研究基于TTP特征将该攻击高度置信归因于LABYRINTHCHOLLIMA组织(隶属Lazarus),并提供了完整的IOC指标和检测防御建议。 综合评分: 92 文章分类: 供应链安全,威胁情报,恶意软件,漏洞预警,应急响应
Axios npm 供应链攻击从TTP层面特征的归属分析
原创
威胁情报中心 威胁情报中心
奇安信威胁情报中心
2026年4月1日 14:03 北京
事件概述
基本信息
| 项目 | 详情 |
| — | — |
| 受影响包 | axios (最受欢迎的 JavaScript HTTP 客户端库,每周下载量超过1亿次) |
| 恶意版本 | [email protected] 和 [email protected] |
| 攻击向量 | 劫持 axios 主要维护者 jasonsaayman 的 npm 账户 |
| 恶意依赖 | [email protected] |
| 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 | [email protected] 发布 (干净诱饵版本,建立发布历史) |
| 2026-03-30 23:59 | [email protected] 发布 (包含恶意载荷) |
| 2026-03-31 00:21 | [email protected] 发布 (注入恶意依赖) |
| 2026-03-31 01:00 | [email protected] 发布 (39分钟后,同时攻击0.x分支) |
| 2026-03-31 03:15 | npm 下架恶意版本 |
攻击技术详情
1. 账户劫持与权限获取
攻击者通过未知方式获取了 axios 主要维护者 jasonsaayman 的长期有效 npm 访问令牌,并将账户邮箱更改为 [email protected]。
关键取证指标:
// 合法版本 ([email protected]) - 通过 GitHub Actions OIDC 发布
"_npmUser": {
"name": "GitHub Actions",
"email": "[email protected]",
"trustedPublisher": {
"id": "github",
"oidcConfigId": "oidc:9061ef30-3132-49f4-b28c-9338d192a1a9"
}
}
// 恶意版本 ([email protected]) - 手动发布,无 OIDC 绑定
"_npmUser": {
"name": "jasonsaayman",
"email": "[email protected]"
// 无 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) 技术细节
双层混淆方案
-
_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/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. 反取证技术
-
自删除
执行后删除
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小时发布
[email protected](干净诱饵) - 随后发布
[email protected](恶意载荷)
相似度: ⭐⭐⭐⭐⭐ (高度相似)
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 等加密邮箱 | ✅ [email protected], [email protected] |
| 账户劫持 | 常见维护者账户接管 | ✅ 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 | [email protected] | 被劫持的 axios 维护者 |
| nrwise | [email protected] | 恶意包发布者 |
相关恶意包
| 包名 | 描述 |
| — | — |
| @shadanai/openclaw | 包含 vendored 的 plain-crypto-js |
| @qqbrowser/[email protected] | 包含篡改的 [email protected] |
检测与防御建议
立即检查步骤
# 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 [email protected] # 1.x 用户
npm install [email protected] # 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
长期防御措施
- 使用 –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
Long-running North Korea threat group splits into 3 distinct operations
-
Socket – Supply Chain Attack on Axios
https://socket.dev/blog/axios-npm-package-compromised
点击阅读原文至ALPHA 9.1
即刻助力威胁研判
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:奇安信威胁情报中心 威胁情报中心 威胁情报中心《Axios npm 供应链攻击从TTP层面特征的归属分析》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论