CVE-2026-22690CVE-2026-22690是pypdf库中的一个拒绝服务漏洞。pypdf是一个免费开源的纯Python PDF处理库。该漏洞影响6.6.0之前的所有版本。漏洞成因是pypdf在非严格模式下解析PDF文件时,如果文件缺少/Root对象但包含较大的/Size值,会导致处理时间异常延长。攻击者可构造特殊的PDF文件,通过省略trailer中的/Root条目同时设置较大的/Size值,使pypdf在解析无效文件时消耗大量计算资源,从而造成拒绝服务攻击。此漏洞仅影响非严格读取模式(strict=False),默认情况下pypdf会使用严格模式进行解析。该漏洞已于版本6.6.0中得到修复,开发者通过优化解析逻辑解决了这一问题。
该漏洞源于pypdf库在解析PDF trailer时的处理逻辑缺陷。当PDF文件的trailer中缺少/Root对象引用,但/Size值被设置为较大数值时,pypdf的非严格解析器会尝试遍历并验证所有可能的交叉引用表条目。由于/Size值较大而/Root对象缺失,解析器会进入一个计算密集型的循环,不断尝试访问不存在的对象,导致CPU资源被长时间占用。攻击者可以利用这一特性构造恶意PDF文件,诱使受害者使用非严格模式打开文件,从而触发拒绝服务状态。攻击成功的关键条件包括:1) 使用非严格模式打开PDF(PdfReader(..., strict=False));2) PDF的trailer中不包含/Root条目;3) trailer的/Size值设置为一个较大的数值(如1000000)。修复方案在版本6.6.0中增加了对这种情况的提前检测和验证,避免了无效的循环遍历操作。