IPBUF安全漏洞报告
English
CVE-2025-63811 CVSS 7.5 高危

CVE-2025-63811: jose2go库高压缩比JWE Token拒绝服务漏洞

披露日期: 2025-11-12

漏洞信息

漏洞编号
CVE-2025-63811
漏洞类型
拒绝服务(DoS)
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
dvsekhvalnov/jose2go

相关标签

拒绝服务DoS压缩炸弹Compression BombJWEJSON Web Encryptionjose2goJWT内存耗尽高危漏洞

漏洞概述

CVE-2025-63811是发现于jose2go库中的一个拒绝服务漏洞。jose2go是一个流行的Go语言JSON Web Token (JWT)和JSON Web Encryption (JWE)实现库,广泛应用于Web应用的身份认证和加密通信场景。该漏洞影响jose2go 1.5.0至1.7.0版本,攻击者可以通过构造具有极高压缩比的恶意JWE token来触发该漏洞。当目标系统尝试解析和解密这些特制的JWE token时,会导致内存消耗急剧增加或CPU资源耗尽,从而造成服务中断。由于该漏洞的利用无需认证且可远程触发,攻击者可以通过任何向目标系统提交JWT/JWE token的接口发起攻击,如登录接口、API网关、SSO系统等。此漏洞的危险性在于其攻击面广、利用门槛低,且压缩炸弹解压后可能产生原始数据的数百倍大小,对服务器资源造成严重威胁。CVSS评分7.5,属于高危漏洞。

技术细节

该漏洞的根本原因在于jose2go库在处理JWE token时缺乏对压缩数据比率的有效验证。JWE标准支持使用DEFLATE算法进行内容压缩,攻击者可以利用这一特性构造所谓的「压缩炸弹」(Compression Bomb)。攻击者创建一个原始数据量很小但压缩比极高的文件,例如一个仅几十字节的压缩数据,解压后可以膨胀到数十MB甚至更大。当jose2go库调用zlib.NewReader()或类似的解压函数处理此恶意JWE token时,会将整个解压后的内容加载到内存中。如果攻击者连续提交多个此类恶意请求,可能导致服务器内存耗尽、OOM Killer触发或CPU持续高负载,最终造成应用程序崩溃或无法响应正常请求。漏洞利用的关键在于JWE的enc字段指定了'DEF'压缩算法,攻击者将精心构造的压缩数据放入encrypted key之后的内容部分。防御者应在应用层实现解压数据的最大尺寸限制,或在调用解压函数前验证压缩比。

攻击链分析

STEP 1
步骤1
攻击者识别使用jose2go库进行JWE token处理的目标应用
STEP 2
步骤2
攻击者构造具有极高压缩比(压缩炸弹)的恶意JWE token,设置zip=DEF启用DEFLATE压缩
STEP 3
步骤3
攻击者通过登录接口、API端点或其他接收JWT/JWE token的入口点提交恶意token
STEP 4
步骤4
jose2go库调用zlib解压函数处理恶意压缩数据,将数百倍于原始大小的数据加载到内存
STEP 5
步骤5
重复提交多个恶意请求导致服务器内存耗尽、CPU持续高负载或进程崩溃
STEP 6
步骤6
目标应用无法响应正常用户请求,发生拒绝服务

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2025-63811 PoC - Compression Ratio DoS for jose2go // This PoC generates a JWE token with extremely high compression ratio package main import ( "encoding/base64" "fmt" "strings" ) func main() { // Create a compression bomb payload // A small compressed payload that expands to huge size when decompressed // This exploits the DEFLATE compression in JWE // Generate payload that decompresses to ~10MB of repeated data smallPayload := strings.Repeat("A", 10) // Small input // In real attack, this would be compressed with DEFLATE // The key is: compressed_size << decompressed_size // JWE Token Structure: // Protected Header (with alg=A128KW, enc=A128GCM, zip=DEF) header := map[string]interface{}{ "alg": "A128KW", "enc": "A128GCM", "zip": "DEF", // Enable DEFLATE compression } // For demonstration, show the attack concept // Actual exploitation requires: // 1. Craft JWE with zip=DEF header // 2. Compress payload with maximum ratio // 3. Send to vulnerable jose2go version fmt.Println("CVE-2025-63811 Attack Concept:") fmt.Println("1. Attacker crafts JWE token with high compression ratio") fmt.Println("2. Sends malicious JWE to target application") fmt.Println("3. jose2go decompresses payload without size limits") fmt.Println("4. Server memory exhaustion leads to DoS") // Example malicious JWE structure maliciousJWE := "eyJhbGciOiJBMTI4S1ciLCJlbmMiOiJBMTI3R0NNIiwiemlwIjoiREVGIn0." + "BASE64_ENCODED_KEY." + "COMPRESSED_BOMB_PAYLOAD." + "BASE64_ENCODED_IV" fmt.Printf("\nMalicious JWE Token: %s\n", maliciousJWE) fmt.Println("\nImpact: Server resource exhaustion, DoS") }

影响范围

jose2go 1.5.0
jose2go 1.5.1
jose2go 1.5.2
jose2go 1.5.3
jose2go 1.6.0
jose2go 1.6.1
jose2go 1.6.2
jose2go 1.6.3
jose2go 1.7.0

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时缓解措施:1) 在JWE解析逻辑前增加压缩比校验,拒绝压缩比超过设定阈值(如1:100)的token;2) 设置解压缓冲区的最大大小限制,超出则终止处理;3) 对所有JWE/JWT输入实施严格的速率限制;4) 暂时禁用JWE的压缩功能(zip字段);5) 使用应用防火墙过滤异常的JWE token;6) 加强服务器资源监控和告警机制。

参考链接

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