
إثبات مفهوم لاستغلال CVE-2026-24688، وهي ثغرة رفض خدمة في تحليل المخطط التفصيلي في pypdf. يتضمن مولّد PDF خبيث ونصوص إعادة إنتاج توضح استنزاف الذاكرة وتعطل النظام.
يتضمن هذا المستودع كود إثبات المفهوم (PoC) لاستغلال CVE-2026-24688.
ثغرة حرجة لرفض الخدمة (DoS) في منطق تحليل المخطط التفصيلي (المرجعية) في pypdf. عند معالجة ملف PDF يحتوي على مراجع دائرية في المخطط التفصيلي، يدخل المحلل في حلقة لا نهائية تقوم باستمرار بتخصيص الذاكرة، مما يستهلك مئات الميغابايتات من الذاكرة في الثانية على جهازي، ويؤدي إلى انهيار كامل للنظام.
هذا رفض خدمة على مستوى النظام، وليس مجرد تجمّد للتطبيق.
malicious_circular_outline.pdf - ملف PDF استغلالي بمراجع دائرية في المخطط التفصيلي (754 بايت)create_malicious_pdf.py - سكربت لإنشاء ملف PDF الاستغلاليsimple_read_pdf.py - سكربت اختبار بسيط لإعادة إنتاج الثغرةtest_pypdf.sh - سكربت اختبار آلي (يثبّت pypdf ويشغّل الاختبار)README.md - هذا الملفتحذير: قد تتسبب هذه الاختبارات في انهيار نظامك إذا لم تراقب استهلاك الذاكرة وتلغيها في الوقت المناسب.
# تشغيل سكربت الاختبار الآلي (مع حماية المهلة الزمنية)
chmod +x test_pypdf.sh
./test_pypdf.sh
# سيؤدي هذا إلى:
# 1. تثبيت الإصدار الضعيف من pypdf
# 2. تشغيل الاختبار مع مهلة زمنية 15 ثانية
# 3. إظهار سلوك استهلاك الذاكرة
# تثبيت pypdf (الإصدار الضعيف 6.6.0)
pip install "pypdf==6.6.0"
# التشغيل مع مهلة زمنية
timeout 10s python3 simple_read_pdf.py malicious_circular_outline.pdf
# تثبيت pypdf (الإصدار الضعيف 6.6.0)
pip install "pypdf==6.6.0"
# التشغيل بدون مهلة زمنية
python3 simple_read_pdf.py malicious_circular_outline.pdf
def _get_outline(self, node, outline=None):
while True: # ❌ لا يوجد كشف للدورات!
outline_obj = self._build_outline_item(node)
if outline_obj:
outline.append(outline_obj) # ❌ تخصيص ذاكرة في الحلقة!
if "/Next" not in node:
break
node = node["/Next"] # ❌ يتبع المراجع الدائرية
السبب الجذري: لا توجد مجموعة للزيارات، ولا حد لعدد التكرارات، وتخصيص مستمر للذاكرة
اختبار واقعي:
خصائص الهجوم:
تم إصلاح الثغرة في الإصدار 6.6.2