CVE-2024-29371CVE-2024-29371是jose4j库中的一个高危拒绝服务漏洞,CVSS评分达到7.5分。该漏洞存在于jose4j 0.9.6之前的版本中,攻击者可以通过构造具有极高压缩比的恶意JSON Web Encryption(JWE)令牌来触发此漏洞。当服务器处理这类恶意令牌时,解压缩过程会导致大量的内存分配和CPU资源消耗,最终造成服务拒绝。jose4j是一个流行的Java JWT/JWE/JWS处理库,广泛应用于各种Java Web应用和微服务架构中实现身份认证和授权功能。由于该库在处理JWE令牌时默认启用了压缩功能,攻击者可以利用这一特性构造精心设计的压缩数据,使得解压后的数据量远超原始输入,从而耗尽服务器资源。此漏洞无需任何认证即可被利用,攻击复杂度低,潜在危害大。
jose4j库在处理JWE(JSON Web Encryption)令牌时支持DEFLATE压缩算法,攻击者利用这一特性构造了所谓的"压缩炸弹"(Zip Bomb)。攻击原理如下:攻击者创建一个看似很小的JWE令牌,但其压缩内容在解压后会膨胀到巨大的体积。这种攻击利用了DEFLATE压缩算法的特点,通过重复的模式实现极高的压缩比(例如,原始数据可能只有几KB,但解压后可以达到数百MB甚至数GB)。当jose4j库接收到恶意JWE令牌时,会尝试进行解压缩操作。在解压过程中,程序会分配大量内存来存储解压后的数据,同时消耗大量CPU资源进行处理。如果服务器同时处理多个恶意请求,或者单个解压操作消耗的资源过大,将导致服务器内存耗尽、响应变慢甚至崩溃。由于JWE令牌通常在身份认证流程中处理,攻击者可以频繁发送此类恶意请求,进一步放大攻击效果。防御此类攻击需要在解压前对压缩数据的大小进行严格限制,或者使用流式解压方式避免一次性加载全部数据。