Strukturele lêerformaat Exploit Detection (0‑Click Chains)

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Hierdie blad vat praktiese tegnieke saam om 0‑click mobiele exploit‑lêers op te spoor deur strukturele invariants van hul formate te valideer in plaas van op byte‑handtekeninge te staatmaak. Die benadering generaliseer oor monsters, polymorfe variante, en toekomstige exploits wat dieselfde parser‑logika misbruik.

Belangrike idee: kodeer strukturele onmoontlikhede en kruis‑veld teenstrydighede wat slegs verskyn wanneer ’n kwesbare decoder/parser‑toestand bereik word.

Sien ook:

PDF File analysis

Waarom struktuur, nie handtekeninge nie

Wanneer gewapende monsters nie beskikbaar is nie en payload‑bytes muteer, misluk tradisionele IOC/YARA‑patrone. Strukturele opsporing ondersoek die houer se verklaarde uitleg teenoor wat wiskundig of semanties moontlik is vir die formaat‑implementering.

Tipiese kontroles:

  • Valideer tabelgroottes en grenswaardes afgeleid van die spesifikasie en veilige implementasies
  • Merk onwettige/ondokumenteerde opcodes of toestandoorplasings in ingesloten bytecode
  • Vergelyk metadata teenoor werklike gekodeerde stroomkomponente
  • Detecteer teenstrydige velde wat parser‑verwarring of integer overflow‑opstellings aandui

Hieronder is konkrete, veldgetoetste patrone vir verskeie hoë‑impak kettings.


PDF/JBIG2 – FORCEDENTRY (CVE‑2021‑30860)

Teiken: JBIG2 simbool‑woordeboeke ingebed binne PDF’s (gereeld gebruik in mobiele MMS‑parsing).

Strukturele seine:

  • Teenstrydige woordeboektoestand wat nie in goedaardige inhoud kan voorkom nie, maar nodig is om die oorloop in aritmetiese dekodering te aktiveer.
  • Verdagte gebruik van globale segmente gekombineer met abnormale simbooltellings tydens refinement coding.

Pseudo‑logika:

# 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")

Praktiese triage:

  • Identifiseer en ekstraheer JBIG2-strome uit die PDF
  • pdfid/pdf-parser/peepdf om strome te lokaliseer en te dump
  • Verifieer arithmetic coding-vlagte en symbol dictionary-parameters teen die JBIG2-spesifikasie

Aantekeninge:

  • Werk sonder ingebedde payload signatures
  • Lae FP in die praktyk omdat die gemerkte toestand wiskundig inkonsistent is

WebP/VP8L – BLASTPASS (CVE‑2023‑4863)

Teiken: WebP lossless (VP8L) Huffman prefix‑code tables.

Strukturele seine:

  • Totale grootte van die opgeboude Huffman-tabelle oorskry die veilige boonste grens wat deur die referensie/gepatchte implementasies verwag word, wat die overflow precondition aandui.

Pseudo‑logika:

# 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")

Praktiese triage:

  • Kontroleer WebP container chunks: VP8X + VP8L
  • Parseer VP8L prefix codes en bereken werklik toegewezen tabelgroottes

Notes:

  • Robuust teen byte‑vlak polimorfisme van die payload
  • Die grens word afgelei van upstream perke/patch-analise

TrueType – TRIANGULATION (CVE‑2023‑41990)

Teiken: TrueType bytecode binne fpgm/prep/glyf programme.

Strukturele seine:

  • Aanwesigheid van ongedokumenteerde/verbode opcodes in Apple se interpreter wat deur die exploit chain gebruik word.

Pseudo‑logika:

# Flag undocumented TrueType bytecode leveraged by TRIANGULATION
switch opcode:
case 0x8F, 0x90:
mark_malicious("Undocumented TrueType bytecode")
default:
continue

Praktiese triage:

  • Voer font-tabelle uit (bv. met fontTools/ttx) en skandeer fpgm/prep/glyf-programme
  • Geen nood om die interpreter volledig te emuleer om waarde uit aanwesigheidskontroles te kry

Notes:

  • Mag seldsame FPs produseer as nie-standaard fonte onbekende opcodes bevat; valideer met sekondêre tooling

DNG/TIFF – CVE‑2025‑43300

Teiken: DNG/TIFF beeldmetadata teenoor werklike komponenttelling in die gekodeerde stroom (bv. JPEG‑Lossless SOF3).

Strukturele seine:

  • Inkonsekwensie tussen EXIF/IFD velde (SamplesPerPixel, PhotometricInterpretation) en die komponenttelling wat uit die beeldstroom-opskrif gepars word en deur die pipeline gebruik word.

Pseudo‑logic:

# 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")

Praktiese triage:

  • Ontleed primêre IFD- en EXIF-tags
  • Lokaliseer en ontleed die ingeslote JPEG‑Lossless header (SOF3) en vergelyk die aantal komponente

Aantekeninge:

  • Gerapporteer as misbruik in die veld; uitstekende kandidaat vir strukturele konsekwentheidskontroles

DNG/TIFF – Samsung libimagecodec.quram.so (CVE‑2025‑21042) + Appended ZIP payload (LANDFALL)

Teiken: DNG (TIFF‑derived) images wat ’n ingeslote ZIP-argief aangeheg by EOF dra om native payloads te stage na parser RCE.

Strukturele seine:

  • Lêermagie dui op TIFF/DNG (II*\x00 or MM\x00*) maar lêernaam boots JPEG na (bv. .jpg/.jpeg WhatsApp-naamgewing).
  • Aanwesigheid van ’n ZIP Local File Header of EOCD magic naby EOF (PK\x03\x04 of PK\x05\x06) wat nie deur enige TIFF IFD-dataarea (strips/tiles/JPEGInterchangeFormat) verwys word nie.
  • Ongewoon groot aangehegte data na die laaste verwysde IFD-data blok (honderde KB tot MB), ooreenstemmend met ’n gebundelde argief van .so modules.

Pseudo‑logika:

# 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)")

Praktiese triage:

  • Identifiseer formaat vs naam:
  • file sample; exiftool -s -FileType -MIMEType sample
  • Vind ZIP-voetstuk/kop naby EOF en 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‑kontroleer dat TIFF‑datastreke nie met die carved ZIP‑streek oorvleuel nie:
  • tiffdump -D sample.dng | egrep ‘StripOffsets|TileOffsets|JPEGInterchangeFormat|StripByteCounts|TileByteCounts|JPEGInterchangeFormatLength’
  • Bevestig max(offset+length) << zip_off
  • Een‑skoot carving (grof): binwalk -eM sample.dng

Nota:

  • 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.

HEIF/AVIF – libheif & libde265 (CVE‑2024‑41311, CVE‑2025‑29482, CVE‑2025‑65586)

Teiken: HEIF/AVIF containers parsed by libheif (and ImageIO/OpenImageIO builds that bundle it).

Strukturele seine:

  • Overlay items (iloc/iref) waarvan die bron‑rektangles die basiese beeldafmetings oorskry of waarvan die offsets negatief/oorvloei → veroorsaak ImageOverlay::parse out‑of‑bounds (CVE‑2024‑41311).
  • Grid items wat na nie‑bestaande item‑IDs verwys (ImageItem_Grid::get_decoder NULL deref, CVE‑2025‑43967) – maklike strukturele kontrole, geen decoding vereis nie.
  • SAO/loop‑filter‑parameters of tile‑tellings wat tabeltoewysings dwing wat groter is as die maksimum wat libde265 toelaat (CVE‑2025‑29482): oormatige bandtelle of slice‑dimensies.
  • Box‑lengte/omvanggroottes wat ver oor EOF wys (tipies in CVE‑2025‑65586 PoCs discovered via fuzzing).

Pseudo‑logika:

# HEIF overlay bounds check
for overlay in heif_overlays:
if overlay.x < 0 or overlay.y < 0: mark_malicious("HEIF overlay negative offset")
if overlay.x + overlay.w > base.w or overlay.y + overlay.h > base.h:
mark_malicious("HEIF overlay exceeds base image (CVE‑2024‑41311 pattern)")

# Grid item reference validation
for grid in heif_grids:
if any(ref_id not in item_ids):
mark_malicious("HEIF grid references missing item (CVE‑2025‑43967 pattern)")

# SAO / slice allocation guard
if sao_band_count > 32 or (tile_cols * tile_rows) > MAX_TILES or sao_eo_class not in {0..3}:
mark_malicious("HEIF SAO/tiling exceeds safe bounds (CVE‑2025‑29482 pattern)")

Praktiese triage:

  • Vinnige metadata‑kontrole sonder volledige dekodering:
  • heif-info sample.heic
  • oiiotool –info –stats sample.heic
  • Valideer extents teen lêergrootte:
  • heif-convert –verbose sample.heic /dev/null | grep -i extent
  • Carve verdagte boxes vir handmatige inspeksie:
  • dd if=sample.heic bs=1 skip=$((box_off)) count=$((box_len)) of=box.bin

Aantekeninge:

  • Hierdie kontroles vang onsamehangende strukture voordat swaar dekodering plaasvind; nuttig vir mail/MMS gateways wat slegs allow/deny‑besluite benodig.
  • libheif limiete verskuif oor weergawes; her‑baseline konstantes wanneer upstream verander (1.18.x → 1.21.x het overlay en grid‑validasie aangespits).

Implementasiepatrone en prestasie

’ n Praktiese skandeerder moet:

  • Outo‑detect lêertipe en stuur net relevante ontleders (PDF/JBIG2, WebP/VP8L, TTF, DNG/TIFF, HEIF/AVIF)
  • Stream/deel‑ontleed om toewysings te minimaliseer en vroeë beëindiging moontlik te maak
  • Voer ontledings parallel uit (thread‑pool) vir massa triage

Voorbeeld‑werkvloei met ElegantBouncer (open‑source Rust implementation of these checks):

# 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-wenke en randgevalle

  • Ingebedde objekte: PDFs kan beelde (JBIG2) en fonte (TrueType) insluit; ekstraheer en skandeer rekurssief
  • Decompressie‑veiligheid: gebruik biblioteke wat tabelle/buffers streng beperk voordat hulle gealloceer word
  • Valse positiewe: hou reëls konserwatief, verkies teenstrydighede wat volgens die spesifikasie onmoontlik is
  • Weergawe‑drift: herbepaal grense (bv. VP8L tabelgroottes) wanneer upstream-parsers hul perke verander

Verwante gereedskap

  • ElegantBouncer – strukturele skandeerder vir bogenoemde deteksies
  • pdfid/pdf-parser/peepdf – PDF-objek‑ekstraksie en statiese analise
  • pdfcpu – PDF-linter/sanitiseerder
  • fontTools/ttx – voer TrueType-tabelle en bytekode uit
  • exiftool – lees TIFF/DNG/EXIF-metagegewens
  • dwebp/webpmux – ontleed WebP-metagegewens en blokke
  • heif-info/heif-convert (libheif) – HEIF/AVIF-struktuurinspeksie
  • oiiotool – valideer HEIF/AVIF via OpenImageIO

References

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks