
Dompdf: अत्यधिक बड़े इमेज बिटमैप्स का उपयोग करके संसाधन क्षय (Resource Exhaustion) के माध्यम से सेवा अस्वीकार (DoS)
यह रिपॉज़िटरी और इसकी सामग्री केवल शैक्षिक और अनुसंधान उद्देश्यों के लिए प्रदान की गई है। यहाँ दी गई जानकारी के साथ किसी भी दुरुपयोग, क्षति या अवैध गतिविधियों के लिए लेखक ज़िम्मेदार नहीं है। लक्ष्य वातावरण का परीक्षण करने से पहले हमेशा प्राधिकरण प्राप्त करें।
Dompdf v3.1.5 संसाधन थकावट के माध्यम से सेवा इनकार (DoS) हमले के प्रति भेद्य है। एक हमलावर विशाल आयामों (जैसे, 30,000x30,000 पिक्सेल) वाली एकल छवि युक्त विशेष रूप से तैयार किया गया HTML दस्तावेज़ प्रदान करके PHP प्रक्रिया को क्रैश कर सकता है।
हालाँकि Dompdf छवि आयामों को सत्यापित करने के लिए आंतरिक जाँच लागू करता है, इन्हें Base64 में एन्कोड की गई उच्च-एन्ट्रॉपी छवि (जैसे यादृच्छिक शोर) का उपयोग करके और विशिष्ट CSS कंटेनरों में लपेटकर बायपास किया जा सकता है।
मानक ठोस-रंग छवियों को अक्सर संपीड़न एल्गोरिदम या रेंडरिंग इंजन द्वारा अनुकूलित किया जा सकता है। हालाँकि, एक उच्च-एन्ट्रॉपी शोर छवि PHP इंजन को 900 मिलियन पिक्सेल में से प्रत्येक को अलग-अलग संसाधित करने के लिए बाध्य करती है। जब render() को कॉल किया जाता है, तो इंजन मेमोरी में असंपीड़ित बिटमैप को संभालने का प्रयास करता है और प्रत्येक उच्च-विचरण पिक्सेल डेटा बिंदु के लिए लेआउट की गणना करता है। इसके परिणामस्वरूप:
यह भेद्यता इसलिए मौजूद है क्योंकि आयाम सत्यापन जल्दी होता है, लेकिन रेंडरिंग चरण के दौरान ऑब्जेक्ट के बाउंडिंग बॉक्स और आंतरिक बफ़र्स की गणना के लिए संसाधन आवंटन उस एकल ऑब्जेक्ट के लिए संचयी CPU समय या मेमोरी उपयोग को सख्ती से सीमित नहीं करता है जो प्रारंभिक जाँच पास कर चुका है।
https://github.com/user-attachments/assets/d1f5a07b-a7c5-4b5e-84b5-1e47e73522d9
composer require dompdf/dompdf:3.1.5
exploit.py):monitor.py):render.php नाम की एक फ़ाइल बनाएँ। यह स्क्रिप्ट Dompdf लाइब्रेरी के मानक कार्यान्वयन की नकल करते हुए एक कमज़ोर प्रवेश बिंदु के रूप में कार्य करती है:php -d memory_limit=2G render.php < payload.html
निम्नलिखित लॉग संसाधन समाप्ति भेद्यता के सफल शोषण को प्रदर्शित करते हैं। PHP प्रक्रिया को प्रदान की गई उदार 2GB मेमोरी सीमा के बावजूद, एक ही उच्च-एंट्रॉपी छवि एक घातक क्रैश का कारण बनती है।
python3 exploit.py
[*] Generating 30000x30000 High-Entropy Noise Bomb...
[+] High-entropy payload saved to: payload.html
php -d memory_limit=2G render.php < payload.html
Output
[*] Starting Dompdf rendering process...
PHP Fatal error: Allowed memory size of 2147483648 bytes exhausted (tried to allocate 1200355712 bytes) in /home/far00t/dompdf_exploit/vendor/dompdf/dompdf/src/Dompdf.php on line 490
render.php प्रक्रिया निष्पादित करते समय, monitor.py स्क्रिप्ट ने निम्नलिखित टेलीमेट्री कैप्चर की, जो सिस्टम संसाधनों पर प्रभाव दर्शाती है:
python3 monitor.py
[*] Searching for PHP processes... (Press Ctrl+C to stop)
[MONITOR] PID: 210767 | RAM: 953.17 MB | CPU: 99.7%
एक अनधिकृत रिमोट हमलावर एक तैयार किया गया HTML स्ट्रिंग सबमिट करके वेब सर्वर पर पूर्ण Denial of Service उत्पन्न कर सकता है। यह किसी भी ऐसे एप्लिकेशन को प्रभावित करता है जो उपयोगकर्ताओं को HTML सामग्री या URL प्रदान करने की अनुमति देता है जिन्हें बाद में Dompdf का उपयोग करके PDF में परिवर्तित किया जाता है।