このリポジトリには、CVE-2026-24688 を発動させるための概念実証(PoC)コードが含まれています。
pypdf のアウトライン(ブックマーク)解析ロジックにおける重大なサービス拒否(DoS)脆弱性。循環するアウトライン参照を含む 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 - このファイル警告: メモリ消費量に注意を払い、適切なタイミングでキャンセルしないと、これらのテストはシステムをクラッシュさせる可能性があります。
# Run the automated test script (with timeout protection)
chmod +x test_pypdf.sh
./test_pypdf.sh
# This will:
# 1. Install the vulnerable version of pypdf
# 2. Run test with 15-second timeout
# 3. Show memory consumption behavior
# Install pypdf (vulnerable version 6.6.0)
pip install "pypdf==6.6.0"
# Run with timeout
timeout 10s python3 simple_read_pdf.py malicious_circular_outline.pdf
# Install pypdf (vulnerable version 6.6.0)
pip install "pypdf==6.6.0"
# Run without timeout
python3 simple_read_pdf.py malicious_circular_outline.pdf
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
根本原因: 訪問済みセットなし、反復制限なし、継続的なメモリ割り当て
実環境でのテスト:
攻撃の特徴:
バージョン 6.6.2 で修正済み