CVE-2026-39373JWCrypto是一个用于实现JWK、JWS和JWE规范的Python库。在1.5.7版本之前,该库存在一个安全漏洞。尽管此前针对CVE-2024-28102的补丁将输入令牌大小限制为250KB,但未验证解压后的输出大小。未经身份认证的攻击者可以通过发送带有ZIP压缩的特制JWE令牌,利用压缩炸弹原理,导致服务器内存耗尽,从而引发拒绝服务攻击。该问题已在1.5.7版本中修复。
该漏洞的根本原因在于JWCrypto对JWE令牌解压处理过程中的逻辑缺陷。虽然之前的修复限制了输入令牌的大小为250KB,以防止直接的输入过载,但开发者忽略了压缩算法的特性(特别是ZIP压缩)。攻击者可以构造一个经过高度压缩的恶意JWE令牌,该令牌虽然小于250KB的限制,但在解压缩后会膨胀至巨大的体积(约为100MB)。当服务器处理这个恶意令牌时,会尝试将解压后的数据加载到内存中。由于未对解压后的输出大小进行校验,这会导致服务器内存被迅速耗尽。对于内存受限的系统,这种攻击会导致服务崩溃或严重卡顿,造成拒绝服务。攻击向量为网络(AV:N),无需用户交互(UI:N)且无需认证(PR:N),使得攻击非常容易实施。