Fomovet/cve-2026-24688

GitHub: Fomovet/cve-2026-24688

针对 pypdf 库循环大纲引用 DoS 漏洞(CVE-2026-24688)的概念验证代码与复现工具。

Stars: 0 | Forks: 0

# CVE-2026-24688 - pypdf - 循环引用 DoS 漏洞 本仓库包含用于触发 CVE-2026-24688 的概念验证代码。 ## 摘要 pypdf 的大纲(书签)解析逻辑中存在严重的拒绝服务漏洞。在处理包含循环大纲引用的 PDF 时,解析器会进入无限循环并不断分配内存,在我的测试机 (TM) 上每秒消耗数百 MB 内存,最终导致系统完全崩溃。 **这是一个系统级的 DoS,而不仅仅是应用程序挂起。** ## 目录 - `malicious_circular_outline.pdf` - 包含循环大纲的漏洞利用 PDF(754 字节) - `create_malicious_pdf.py` - 用于生成漏洞利用 PDF 的脚本 - `simple_read_pdf.py` - 用于复现漏洞的简单测试脚本 - `test_pypdf.sh` - 自动化测试脚本(安装 pypdf 并运行测试) - `README.md` - 本文件 **警告:** 如果您不密切关注内存消耗并及时取消运行,这些测试可能会导致您的系统崩溃。 ### 自动化测试(不安全) ``` # 运行自动化测试脚本(带有 timeout 保护) chmod +x test_pypdf.sh ./test_pypdf.sh # 这将: # 1. 安装存在漏洞的 pypdf 版本 # 2. 运行带有 15 秒 timeout 的测试 # 3. 展示内存消耗行为 ``` ### 手动测试 #### 测试 1:受控测试(使用 timeout 限制 10 秒) ``` # 安装 pypdf(存在漏洞的版本 6.6.0) pip install "pypdf==6.6.0" # 使用 timeout 运行 timeout 10s python3 simple_read_pdf.py malicious_circular_outline.pdf ``` #### 测试 2:完全崩溃测试(不安全) ``` # 安装 pypdf(存在漏洞的版本 6.6.0) pip install "pypdf==6.6.0" # 不使用 timeout 运行 python3 simple_read_pdf.py malicious_circular_outline.pdf ``` ## 漏洞详情 ### 存在漏洞的代码 **位置:** [`pypdf/_doc_common.py` - `_get_outline()` 方法(第 858-873 行)](https://github.com/py-pdf/pypdf/blob/main/pypdf/_doc_common.py#L858-L873) ``` def _get_outline(self, node, outline=None): while True: # ❌ NO cycle detection! outline_obj = self._build_outline_item(node) if outline_obj: outline.append(outline_obj) # ❌ Heap allocation in loop! if "/Next" not in node: break node = node["/Next"] # ❌ Follows circular references ``` **根本原因:** 没有访问记录集合,没有迭代限制,内存不断分配 ## 影响 ### 确认的测试结果 **实际测试:** - 结果:系统崩溃,需要硬重启 - 时间线:约 5 分钟导致系统完全崩溃 () - 内存:消耗 30GB+ - CPU:所有核心 100%(系统抖动) **攻击特征:** - ✅ 100% CPU(立即触发) - ✅ 内存线性增长 - ✅ 全系统崩溃 - ✅ 需要硬重启 - ✅ 潜在的数据丢失 ## 修复 已在 6.6.2 版本中修复 https://github.com/py-pdf/pypdf/security/advisories/GHSA-2q4j-m29v-hq73
标签:Maven, PDF解析, Python, 应用安全, 拒绝服务攻击, 无后门, 漏洞验证, 逆向工具, 配置错误