Strukturelle Dateiformat-Exploit Detection (0‑Click Chains)
Tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Diese Seite fasst praktische Techniken zusammen, um 0‑click mobile exploit files zu erkennen, indem strukturelle Invarianten ihrer Formate validiert werden, statt sich auf Byte-Signaturen zu verlassen. Der Ansatz generalisiert über samples, polymorphe Varianten und zukünftige exploits, die dieselbe parser logic missbrauchen.
Kernidee: strukturelle Unmöglichkeiten und feldübergreifende Inkonsistenzen kodieren, die nur auftreten, wenn ein verwundbarer Decoder/Parser-Zustand erreicht wird.
Siehe auch:
Warum Struktur, nicht Signaturen
Wenn weaponized samples nicht verfügbar sind und payload bytes mutieren, versagen traditionelle IOC/YARA-Pattern. Strukturelle Erkennung prüft das deklarierte Layout des Containers gegenüber dem, was mathematisch oder semantisch für die Format-Implementierung möglich ist.
Typische Prüfungen:
- Validiere Tabellengrößen und Grenzen, abgeleitet von der Spezifikation und sicheren Implementierungen
- Markiere illegale/undokumentierte opcodes oder Zustandsübergänge in eingebettetem bytecode
- Kreuzprüfe Metadaten VS tatsächliche kodierte Stream-Komponenten
- Erkenne widersprüchliche Felder, die auf Parser-Verwirrung oder Integer-Overflow-Setups hinweisen
Nachfolgend konkrete, feldgetestete Muster für mehrere high‑impact chains.
PDF/JBIG2 – FORCEDENTRY (CVE‑2021‑30860)
Target: JBIG2 symbol dictionaries embedded inside PDFs (often used in mobile MMS parsing).
Strukturelle Signale:
- Widersprüchlicher dictionary state, der in benign content nicht auftreten kann, aber erforderlich ist, um den Overflow in arithmetic decoding auszulösen.
- Verdächtige Verwendung von global segments kombiniert mit abnormalen symbol counts während refinement coding.
Pseudo‑logic:
# 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")
Praktische Triage:
- JBIG2-Streams im PDF identifizieren und extrahieren
- pdfid/pdf-parser/peepdf, um Streams zu lokalisieren und zu dumpen
- Arithmetische-Codierungs-Flags und Parameter des Symbol-Wörterbuchs gegen die JBIG2-Spezifikation verifizieren
Anmerkungen:
- Funktioniert ohne eingebettete Payload-Signaturen
- Geringe FP-Rate in der Praxis, weil der markierte Zustand mathematisch inkonsistent ist
WebP/VP8L – BLASTPASS (CVE‑2023‑4863)
Target: WebP lossless (VP8L) Huffman-Präfix-Codetabellen.
Strukturelle Hinweise:
- Die Gesamtgröße der konstruierten Huffman-Tabellen überschreitet die sichere obere Grenze, die von den Referenz-/gepatchten Implementierungen erwartet wird, was darauf hinweist, dass die Bedingung für einen Überlauf erfüllt ist.
Pseudo-Logik:
# 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")
Praktische Triage:
- Überprüfe WebP-Container-Chunks: VP8X + VP8L
- Parste VP8L-Präfixcodes und berechne die tatsächlich zugewiesenen Tabellengrößen
Hinweise:
- Robust gegenüber byte‑level polymorphism der payload
- Die Grenze wird aus der Analyse der upstream-Limits und Patches abgeleitet
TrueType – TRIANGULATION (CVE‑2023‑41990)
Ziel: TrueType bytecode in fpgm/prep/glyf-Programmen.
Strukturelle Signale:
- Vorhandensein von undokumentierten/verbotenen opcodes im Apple‑Interpreter, die von der exploit chain verwendet werden.
Pseudo‑Logik:
# Flag undocumented TrueType bytecode leveraged by TRIANGULATION
switch opcode:
case 0x8F, 0x90:
mark_malicious("Undocumented TrueType bytecode")
default:
continue
Practical triage:
- Dump font tables (e.g., using fontTools/ttx) and scan fpgm/prep/glyf programs
- No need to fully emulate the interpreter to get value from presence checks
Notes:
- May produce rare False Positives (FPs) if nonstandard Fonts include unknown opcodes; validate with secondary tooling
DNG/TIFF – CVE‑2025‑43300
Target: DNG/TIFF image metadata gegen die tatsächliche Komponentenanzahl im kodierten Stream (z. B. JPEG‑Lossless SOF3).
Structural signals:
- Inkonsistenz zwischen EXIF/IFD‑Feldern (SamplesPerPixel, PhotometricInterpretation) und der aus dem Image‑Stream‑Header geparsten Komponentenanzahl, die von der Pipeline verwendet wird.
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")
Praktische Triage:
- Primäre IFD- und EXIF-Tags parsen
- Den eingebetteten JPEG‑Lossless-Header (SOF3) finden und parsen sowie Komponentenanzahlen vergleichen
Anmerkungen:
- Über Ausnutzung in der freien Wildbahn berichtet; ausgezeichneter Kandidat für strukturelle Konsistenzprüfungen
DNG/TIFF – Samsung libimagecodec.quram.so (CVE‑2025‑21042) + Appended ZIP payload (LANDFALL)
Ziel: DNG (TIFF‑abgeleitete) Bilder, die ein eingebettetes ZIP-Archiv am EOF angehängt enthalten, um native Payloads nach einem Parser RCE zu platzieren.
Strukturelle Signale:
- File magic zeigt TIFF/DNG (
II*\x00oderMM\x00*) an, aber der Dateiname imitiert JPEG (z. B..jpg/.jpegWhatsApp-Benennung). - Vorhandensein eines ZIP Local File Header oder EOCD magic nahe EOF (
PK\x03\x04oderPK\x05\x06), das von keinem TIFF IFD-Datenbereich (strips/tiles/JPEGInterchangeFormat) referenziert wird. - Ungewöhnlich große trailing data über den letzten referenzierten IFD-Datenblock hinaus (hundert KB bis MB), konsistent mit einem gebündelten Archiv von .so-Modulen.
Pseudo‑Logik:
# 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)")
Practical triage:
- 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
Notes:
- 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)
Target: HEIF/AVIF containers parsed by libheif (and ImageIO/OpenImageIO builds that bundle it).
Struktursignale:
- Overlay items (iloc/iref), deren Quellrechtecke die Basisbild-Dimensionen überschreiten oder deren Offsets negativ/überlaufend sind → löst ImageOverlay::parse out‑of‑bounds aus (CVE‑2024‑41311).
- Grid items, die auf nicht existierende Item‑IDs verweisen (ImageItem_Grid::get_decoder NULL deref, CVE‑2025‑43967) – einfache Strukturprüfung, kein Decoding erforderlich.
- SAO/loop‑filter-Parameter oder Tile‑Anzahlen, die Tabellenallokationen erzwingen, die größer sind als das von libde265 erlaubte Maximum (CVE‑2025‑29482): zu hohe Band‑Counts oder Slice‑Dimensionen.
- Box length/extent Größen, die über EOF hinaus zeigen (typisch in CVE‑2025‑65586 PoCs, die via fuzzing entdeckt wurden).
Pseudo‑logic:
# 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)")
Praktische Triage:
- Schnelle Metadaten-Prüfung ohne vollständiges Decoding:
- heif-info sample.heic
- oiiotool –info –stats sample.heic
- Extents im Verhältnis zur Dateigröße validieren:
- heif-convert –verbose sample.heic /dev/null | grep -i extent
- Verdächtige Boxes für manuelle Inspektion ausschneiden:
- dd if=sample.heic bs=1 skip=$((box_off)) count=$((box_len)) of=box.bin
Hinweise:
- Diese Prüfungen erkennen fehlerhafte Strukturen bevor ein aufwändiges Decoding erfolgt; nützlich für mail/MMS-Gateways, die nur Zulassen-/Ablehnen-Entscheidungen treffen müssen.
- libheif-Limits verschieben sich zwischen Versionen; Konstanten neu kalibrieren, wenn upstream sich ändert (1.18.x → 1.21.x verschärfte Overlay- und Grid-Validierung).
Implementierungsmuster und Leistung
Ein praktischer Scanner sollte:
- Automatisch Dateityp erkennen und nur relevante Analyzer ausführen (PDF/JBIG2, WebP/VP8L, TTF, DNG/TIFF, HEIF/AVIF)
- Stream/teilweises Parsen, um Speicherallokationen zu minimieren und frühes Beenden zu ermöglichen
- Analysen parallel ausführen (Thread‑Pool) für Massen-Triage
Beispiel-Workflow mit ElegantBouncer (Open-Source Rust-Implementierung dieser Prüfungen):
# 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-Tipps und Randfälle
- Eingebettete Objekte: PDFs können Bilder (JBIG2) und Fonts (TrueType) einbetten; extrahieren und rekursiv scannen
- Sicherheit bei Dekompression: Verwende Bibliotheken, die Tabellen/Puffer vor der Allokation hart begrenzen
- Fehlalarme: Regeln konservativ halten, Widersprüche bevorzugen, die gemäß der Spezifikation unmöglich sind
- Versionsdrift: Grenzwerte neu festlegen (z. B. VP8L-Tabellengrößen), wenn upstream Parser ihre Limits ändern
Verwandte Tools
- ElegantBouncer – struktureller Scanner für die oben genannten Erkennungen
- pdfid/pdf-parser/peepdf – PDF-Objekt-Extraktion und statische Analyse
- pdfcpu – PDF-Linter/Sanitizer
- fontTools/ttx – TrueType-Tabellen und Bytecode ausgeben
- exiftool – TIFF/DNG/EXIF-Metadaten lesen
- dwebp/webpmux – WebP-Metadaten und Chunks parsen
- heif-info/heif-convert (libheif) – HEIF/AVIF-Strukturinspektion
- oiiotool – HEIF/AVIF über OpenImageIO validieren
Referenzen
- 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
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.


