CVE-2026-102993 pypdf 拒绝服务漏洞
影响攻击者可利用特制 PDF 造成内存耗尽,导致应用不可用
pypdf 是一个免费开源的纯 Python PDF 处理库。在 6.17.0 版本之前,当应用调用接口获取文档页码标签时,特制的 PDF 可提供异常巨大的罗马数字页码值,导致 _page_labels.py 生成超长数字字符串。该问题会消耗大量内存,可能使应用不可用,官方已在 6.17.0 版本修复。
影响范围
pypdf 6.17.0 之前的版本;具体受影响版本范围暂无更细公开信息。
漏洞详情
漏洞类型为拒绝服务(资源耗尽)。成因是 pypdf/_page_labels.py 在处理 PDF 中的罗马数字页码标签时,未对数值大小做合理限制,遇到异常大的罗马数字值会生成极长的数字字符串。攻击者只需构造包含超大罗马页码标签的 PDF,并诱导应用调用获取页码标签的接口,即可触发大量内存分配。
利用条件与风险
利用前提是应用使用受影响版本的 pypdf 解析并读取攻击者可控 PDF 的页码标签;实战中可造成服务内存耗尽、响应缓慢甚至崩溃,属于拒绝服务风险。
修复建议
官方修复方案为升级至 pypdf 6.17.0 或更高版本;临时缓解措施包括避免对不可信 PDF 调用页码标签相关接口,或对解析过程施加内存与超时限制。
pypdf is a free and open-source pure-python PDF library. Prior to 6.17.0, a crafted PDF can provide unusually large Roman page-label values that cause pypdf/_page_labels.py to generate excessively large numeral strings when an application retrieves document page labels, consuming large amounts of memory and potentially making the application unavailable. This issue is fixed in version 6.17.0.