
POC لـ CVE-2026-24688
يحتوي هذا المستودع على كود إثبات المفهوم لاستغلال الثغرة CVE-2026-24688.
ثغرة حرجة في رفض الخدمة في منطق تحليل المخطط التفصيلي (الإشارات المرجعية) في pypdf. عند معالجة ملف PDF يحتوي على مراجع دائرية في المخطط التفصيلي، يدخل المحلل في حلقة لا نهائية تقوم باستمرار بتخصيص الذاكرة، مما يستهلك مئات الميغابايتات من الذاكرة في الثانية، على جهازي (TM)، ويؤدي إلى تعطل النظام بالكامل.
هذا هجوم رفض خدمة على مستوى النظام، وليس مجرد تعليق للتطبيق.
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
الموقع: pypdf/_doc_common.py - دالة _get_outline() (السطور 858-873)
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
https://github.com/py-pdf/pypdf/security/advisories/GHSA-2q4j-m29v-hq73