IPBUF安全漏洞报告
English
CVE-2026-21697 CVSS 8.1 高危

CVE-2026-21697 axios4go全局HTTP客户端竞态条件漏洞

披露日期: 2026-01-07

漏洞信息

漏洞编号
CVE-2026-21697
漏洞类型
竞态条件
CVSS评分
8.1 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
axios4go

相关标签

竞态条件axios4goGoHTTP客户端并发安全数据竞争高危CVE-2026-21697

漏洞概述

CVE-2026-21697是axios4go Go语言HTTP客户端库中的一个高危竞态条件漏洞。在0.6.4版本之前,该库使用全局共享的defaultClient处理所有HTTP请求。当多个goroutine并发调用GetAsync、PostAsync等异步方法时,会同时修改同一个http.Client实例的Transport、Timeout和CheckRedirect属性,而没有采用任何同步机制进行保护。这种不安全的并发访问导致竞态条件,可能造成请求配置混乱、超时设置错误或重定向逻辑冲突。攻击者可通过构造并发请求场景,触发内存数据竞争,从而获取其他请求中的敏感信息,包括认证凭据、API密钥、会话令牌等。该漏洞影响所有使用axios4go进行并发HTTP请求的应用,尤其是需要处理不同代理配置或敏感数据的系统。

技术细节

漏洞根源在于axios4go库在初始化时创建了一个全局单例http.Client对象defaultClient,所有HTTP请求默认共享此客户端实例。在并发场景下,不同goroutine调用SetTimeout()、SetProxy()、SetCheckRedirect()等方法时,会直接修改共享http.Client的内部属性。Go语言的http.Client虽然本身是线程安全的,但其Transport、Timeout等字段的修改操作并非原子性。当两个请求几乎同时到达时,一个请求可能正在读取Transport配置,而另一个请求正在修改它,导致data race。具体表现为:1) 请求A读取了请求B设置的代理配置;2) 请求A的超时值被请求B覆盖;3) CheckRedirect函数指向错误的处理逻辑。攻击者可通过发起大量并发请求并监控响应特征,探测到配置混乱现象,进而利用此漏洞进行敏感数据窃取或中间人攻击。

攻击链分析

STEP 1
步骤1
攻击者识别目标应用使用axios4go库进行HTTP请求
STEP 2
步骤2
攻击者构造大量并发HTTP请求,触发竞态条件
STEP 3
步骤3
由于全局defaultClient被并发修改,请求配置发生混乱
STEP 4
步骤4
攻击者利用配置混乱获取其他用户请求中的敏感信息
STEP 5
步骤5
成功窃取认证凭据、API密钥或会话令牌

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2026-21697 PoC - Race Condition in axios4go // This PoC demonstrates the race condition vulnerability package main import ( "fmt" "sync" "time" "github.com/rezmoss/axios4go" ) func main() { // Create multiple goroutines that modify client settings concurrently var wg sync.WaitGroup // Simulate concurrent requests with different configurations for i := 0; i < 10; i++ { wg.Add(1) go func(id int) { defer wg.Done() // Each goroutine sets different timeout and proxy timeout := time.Duration(5+id) * time.Second proxy := fmt.Sprintf("http://proxy-%d.local:8080", id) // Race condition: concurrent modification of shared client axios.SetTimeout(timeout) axios.SetProxy(proxy) // Make request - may use incorrect configuration _, err := axios.Get("https://example.com/api/test") if err != nil { fmt.Printf("Goroutine %d: Request error: %v\n", id, err) } }(i) } wg.Wait() fmt.Println("Race condition PoC completed") // Expected behavior: Configuration mixing between requests // Actual behavior: Data race detected or incorrect configurations used }

影响范围

axios4go < 0.6.4

防御指南

临时缓解措施
在修复版本发布前,可通过以下方式临时缓解:1) 为每个请求创建独立的axios.Client实例而非使用全局客户端;2) 使用互斥锁保护对共享客户端配置的修改;3) 避免在并发请求中使用不同的代理或超时配置;4) 限制并发请求数量以减少竞态条件触发概率。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表