
POC for CVE-2026-24688
इस रेपो में 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 - यह फ़ाइलचेतावनी: ये परीक्षण आपके सिस्टम को क्रैश कर सकते हैं यदि आप मेमोरी खपत पर नज़र नहीं रखते हैं और समय पर इसे रद्द नहीं करते हैं।
# 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