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

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:

PDF File analysis

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*\x00 veya MM\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\x04 veya PK\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

  • 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

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