Yapısal Dosya‑Formatı İstismar Tespiti (0‑Click Chains)
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.
Bu sayfa, byte imzalarına dayanmak yerine formatların yapısal değişmezliklerini doğrulayarak 0‑click mobil istismar dosyalarını tespit etmeye yönelik pratik teknikleri özetler. Yaklaşım örnekler, polimorfik varyantlar ve aynı parser mantığını kötüye kullanan gelecekteki istismarlar arasında genelleştirilebilir.
Ana fikir: yalnızca savunmasız bir decoder/parser durumuna ulaşıldığında ortaya çıkan yapısal imkansızlıkları ve alanlar arası tutarsızlıkları kodlamak.
See also:
Neden yapı, imzalar değil
Silahlanmış örnekler mevcut olmadığında ve payload byte’ları değiştiğinde, geleneksel IOC/YARA kalıpları başarısız olur. Yapısal tespit, kapsayıcının beyan edilen düzenini format uygulaması için matematiksel veya semantik olarak mümkün olanla karşılaştırır.
Tipik kontroller:
- Spesifikasyondan ve güvenli uygulamalardan türetilen tablo boyutlarını ve sınırları doğrula
- Gömülü bytecode içindeki yasadışı/dökümante edilmemiş opcode’ları veya durum geçişlerini işaretle
- metadata VS gerçek kodlanmış akış bileşenlerini çapraz kontrol et
- Parser karışıklığını veya integer overflow kurulumlarını gösteren çelişkili alanları tespit et
Aşağıda birden fazla yüksek etki zinciri için saha testli somut kalıplar yer alıyor.
PDF/JBIG2 – FORCEDENTRY (CVE‑2021‑30860)
Hedef: PDF’lerin içine gömülü JBIG2 sembol sözlükleri (çoğunlukla mobil MMS ayrıştırmasında kullanılır).
Yapısal sinyaller:
- İyi amaçlı içerikte gerçekleşemeyecek fakat aritmetik çözümlemede taşmayı tetiklemek için gerekli olan çelişkili sözlük durumu.
- Refinement coding sırasında anormal sembol sayılarıyla birleşen global segmentlerin şüpheli kullanımı.
Sözde mantık:
# Detecting impossible dictionary state used by FORCEDENTRY
if input_symbols_count == 0 and (ex_syms > 0 and ex_syms < 4):
mark_malicious("JBIG2 impossible symbol dictionary state")
Practical triage:
- PDF’den JBIG2 streams tespit edip çıkarın
- pdfid/pdf-parser/peepdf ile streams’leri bulup dump edin
- Arithmetic coding flags ve symbol dictionary parametrelerini JBIG2 spec ile karşılaştırarak doğrulayın
Notes:
- Gömülü payload signatures olmadan çalışır
- Pratikte düşük FP çünkü işaretlenen durum matematiksel olarak tutarsızdır
WebP/VP8L – BLASTPASS (CVE‑2023‑4863)
Hedef: WebP lossless (VP8L) Huffman prefix‑code tabloları.
Structural signals:
- Oluşturulan Huffman tablolarının toplam boyutu, reference/patched implementations’ın beklediği güvenli üst sınırı aşıyor; bu da overflow önkoşulunun varlığına işaret eder.
Pseudo‑logic:
# Detect malformed Huffman table construction triggering overflow
let total_size = sum(table_sizes)
if total_size > 2954: # example bound: FIXED_TABLE_SIZE + MAX_TABLE_SIZE
mark_malicious("VP8L oversized Huffman tables")
Pratik triage:
- WebP container bölümlerini kontrol et: VP8X + VP8L
- VP8L prefix kodlarını ayrıştır ve gerçek ayrılmış tablo boyutlarını hesapla
Notlar:
- Payload’ın bayt düzeyindeki polimorfizmine karşı dayanıklı
- Sınır, upstream limitleri/yama analizinden türetilmiştir
TrueType – TRIANGULATION (CVE‑2023‑41990)
Hedef: TrueType bytecode, fpgm/prep/glyf programları içinde.
Yapısal sinyaller:
- exploit chain tarafından kullanılan Apple’ın interpreter’ında belgelenmemiş/yasaklı opcode’ların varlığı.
Sözde‑mantık:
# Flag undocumented TrueType opcodes leveraged by TRIANGULATION
switch opcode:
case 0x8F, 0x90:
mark_malicious("Undocumented TrueType bytecode")
default:
continue
Pratik triyaj:
- Yazı tipi tablolarını dök (ör. fontTools/ttx kullanarak) ve fpgm/prep/glyf programlarını tara
- Varlık kontrollerinden değer elde etmek için yorumlayıcıyı tamamen emüle etmeye gerek yok
Notlar:
- Standart dışı fontlar bilinmeyen opcode’lar içeriyorsa nadiren FP üretebilir; ek araçlarla doğrula
DNG/TIFF – CVE‑2025‑43300
Hedef: DNG/TIFF görüntü metadata’sı ile kodlanmış akıştaki gerçek bileşen sayısı arasındaki uyumsuzluk (ör. JPEG‑Lossless SOF3).
Yapısal göstergeler:
- Pipeline tarafından kullanılan görüntü akışı başlığından ayrıştırılan bileşen sayısı ile EXIF/IFD alanları (SamplesPerPixel, PhotometricInterpretation) arasındaki tutarsızlık.
Sözde mantık:
# Metadata claims 2 samples per pixel but stream header exposes only 1 component
if samples_per_pixel == 2 and sof3_components == 1:
mark_malicious("DNG/TIFF metadata vs. stream mismatch")
Pratik ön değerlendirme:
- Birincil IFD ve EXIF etiketlerini ayrıştırın
- Gömülü JPEG‑Lossless başlığını (SOF3) bulun, ayrıştırın ve bileşen sayılarını karşılaştırın
Notlar:
- Gerçek dünyada istismar edildiği rapor edildi; yapısal tutarlılık kontrolleri için mükemmel aday
DNG/TIFF – Samsung libimagecodec.quram.so (CVE‑2025‑21042) + Appended ZIP payload (LANDFALL)
Hedef: DNG (TIFF‑türevi) görüntüler; EOF’ye eklenmiş gömülü bir ZIP arşivi taşıyan ve parser RCE sonrası native payload’ları sahnelemek için kullanılır.
Yapısal göstergeler:
- Dosya magic TIFF/DNG olduğunu gösterir (
II*\x00veyaMM\x00*) ancak dosya adı JPEG’i taklit eder (ör..jpg/.jpeg— WhatsApp isimlendirmesi). - EOF yakınında, herhangi bir TIFF IFD veri bölgesi (strips/tiles/
JPEGInterchangeFormat) tarafından referans verilmeyen bir ZIP Local File Header veya EOCD magic varlığı (PK\x03\x04veyaPK\x05\x06). - Son referans verilen IFD veri bloğunun ötesinde alışılmadık derecede büyük ek veri (yüzlerce KB ila MB), .so modüllerinin paketlenmiş bir arşivi ile uyumlu.
Sözde mantık:
# Detect appended ZIP payload hidden after DNG/TIFF data (Samsung chain)
if is_tiff_dng(magic):
ext = file_extension()
if ext in {".jpg", ".jpeg"}: mark_suspicious("Extension/magic mismatch: DNG vs JPEG")
zip_off = rfind_any(["PK\x05\x06", "PK\x03\x04"], search_window_last_n_bytes=8*1024*1024)
if zip_off >= 0:
end_dng = approx_end_of_tiff_data() # max(end of Strip/Tile/JPEGInterchangeFormat regions)
if zip_off > end_dng + 0x200:
mark_malicious("DNG with appended ZIP payload (LANDFALL‑style)")
Pratik triyaj:
- Identify format vs name:
- file sample; exiftool -s -FileType -MIMEType sample
- Locate ZIP footer/header near EOF and carve:
- off=$(grep -aboa -E $‘PK\x05\x06|PK\x03\x04’ sample.dng | tail -n1 | cut -d: -f1)
- dd if=sample.dng of=payload.zip bs=1 skip=“$off”
- zipdetails -v payload.zip; unzip -l payload.zip
- Sanity‑check TIFF data regions don’t overlap the carved ZIP region:
- tiffdump -D sample.dng | egrep ‘StripOffsets|TileOffsets|JPEGInterchangeFormat|StripByteCounts|TileByteCounts|JPEGInterchangeFormatLength’
- Verify
max(offset+length) << zip_off - One‑shot carving (coarse): binwalk -eM sample.dng
Notlar:
- Exploited in the wild against Samsung’s libimagecodec.quram.so (CVE‑2025‑21042). The appended ZIP contained native modules (e.g., loader + SELinux policy editor) extracted/executed post‑RCE.
Uygulama örüntüleri ve performans
Pratik bir tarayıcı şunları yapmalı:
- Otomatik olarak dosya türünü algılayıp sadece ilgili analizörleri çalıştırmalı (PDF/JBIG2, WebP/VP8L, TTF, DNG/TIFF)
- Atamaları en aza indirmek ve erken sonlandırmaya izin vermek için akış/kısmi ayrıştırma (stream/partial‑parse) yapmalı
- Toplu triyaj için analizleri paralel çalıştırmalı (thread‑pool)
Bu kontrollerin açık kaynaklı Rust uygulaması ElegantBouncer ile örnek iş akışı:
# Scan a path recursively with structural detectors
$ elegant-bouncer --scan /path/to/directory
# Optional TUI for parallel scanning and real‑time alerts
$ elegant-bouncer --tui --scan /path/to/samples
DFIR tips and edge cases
- Embedded objects: PDFs may embed images (JBIG2) and fonts (TrueType); extract and recursively scan
- Decompression safety: use libraries that hard‑limit tables/buffers before allocation
- False positives: keep rules conservative, favor contradictions that are impossible under the spec
- Version drift: re‑baseline bounds (e.g., VP8L table sizes) when upstream parsers change limits
Related tools
- ElegantBouncer – yukarıdaki tespitler için yapısal tarayıcı
- pdfid/pdf-parser/peepdf – PDF nesne çıkarımı ve statik analiz
- pdfcpu – PDF linter/temizleyici
- fontTools/ttx – TrueType tablolarını ve bytecode’u dök
- exiftool – TIFF/DNG/EXIF meta verilerini okumak
- dwebp/webpmux – WebP meta verilerini ve parçalarını ayrıştırmak
References
- ELEGANTBOUNCER: When You Can’t Get the Samples but Still Need to Catch the Threat
- ElegantBouncer project (GitHub)
- Researching FORCEDENTRY: Detecting the exploit with no samples
- Researching BLASTPASS – Detecting the exploit inside a WebP file (Part 1)
- Researching BLASTPASS – Analysing the Apple & Google WebP PoC file (Part 2)
- Researching TRIANGULATION – Detecting CVE‑2023‑41990 with single‑byte signatures
- CVE‑2025‑43300: Critical vulnerability found in Apple’s DNG image processing
- LANDFALL: New Commercial-Grade Android Spyware in Exploit Chain Targeting Samsung Devices
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.


