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
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
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:
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*\x00orMM\x00*) maar lêernaam boots JPEG na (bv..jpg/.jpegWhatsApp-naamgewing). - Aanwesigheid van ’n ZIP Local File Header of EOCD magic naby EOF (
PK\x03\x04ofPK\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
- 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
- CVE‑2024‑41311 analysis (libheif overlay OOB)
- CVE‑2025‑65586 libheif metadata iterator flaw
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
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.


