Authlib JWE压缩炸弹漏洞分析:zip=DEF解压缩导致拒绝服务攻击

详细分析Authlib库中JWE zip=DEF解压缩漏洞CVE-2025-62706,攻击者可通过特制密文引发内存和CPU耗尽,导致拒绝服务攻击,影响版本低于1.6.5,已发布修复方案。

Authlib JWE zip=DEF解压缩炸弹漏洞分析

漏洞概述

Authlib的JWE zip=DEF路径执行无限制的DEFLATE解压缩。极小的密文在解密时可扩展至数十或数百兆字节,使得能够提供可解密令牌的攻击者可以耗尽内存和CPU资源,导致拒绝服务(DoS)。

技术细节

受影响组件

  • Authlib JOSE组件
  • JWE zip=DEF(DEFLATE)支持

漏洞位置

authlib/authlib/jose/rfc7518/jwe_zips.py中,DeflateZipAlgorithm.decompress调用zlib.decompress(s, -zlib.MAX_WBITS)时未设置最大输出限制,允许压缩载荷无限制扩展。

在JWE解码流程(authlib/authlib/jose/rfc7516/jwe.py)中,当保护头部包含"zip": "DEF"时,库将解密的密文路由到解压缩方法,并将完全解压缩的字节分配给明文字段后返回。未应用流限制或配额。

由于DEFLATE在高度重复的输入上可实现极高的压缩比,攻击者可以制作一个微小的zip=DEF密文,在解密期间膨胀为非常大的明文,导致RSS和CPU使用率激增。重复请求可以耗尽进程或主机资源。

代码引用

  • authlib/authlib/jose/rfc7518/jwe_zips.py - DeflateZipAlgorithm.decompress使用无限制的zlib.decompress
  • authlib/authlib/jose/rfc7516/jwe.py - JWE解码路径在头部存在zip=DEF时应用zip_.decompress(msg)

概念验证

测试环境

  • Python 3.10+虚拟环境
  • 从仓库可编辑安装Authlib

测试步骤

1
2
3
4
python3 -m venv .venv
.venv/bin/pip install --upgrade pip
.venv/bin/pip install -e .
.venv/bin/python /authlib/jwe_deflate_dos_demo.py --size 50 --max-rss-mb 2048

测试结果

  • 正常情况:明文=13B,密文=117B,解压缩=13B,峰值RSS=31.0MB
  • 恶意情况:明文=50MB,密文≈4KB,解压缩=50MB,峰值RSS=800+MB,压缩比=12500+

影响分析

影响范围

  • 任何使用Authlib解密具有zip=DEF的JWE令牌的服务
  • 攻击者能够提交将被成功解密的令牌的场景

严重程度

CVSS v3.1评分:6.5(中危)

  • 攻击向量:网络
  • 攻击复杂度:低
  • 所需权限:低
  • 用户交互:无
  • 影响范围:未改变
  • 机密性:无影响
  • 完整性:无影响
  • 可用性:高影响

缓解措施

临时解决方案

  • 在应用边界拒绝或剥离zip=DEF的入站JWE
  • 添加有界解压缩保护
  • 强制执行严格的最大令牌大小并结合速率限制

修复指导

  • 添加保守的最大输出大小(默认256 KB)
  • 考虑使用分块限制的流式解码以避免大单次分配

受影响版本

  • 受影响版本:< 1.6.5
  • 已修复版本:1.6.5

参考链接

  • GHSA-g7f3-828f-7h7m
  • authlib/authlib@e0863d5
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计