Structural FileâFormat 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âDateien zu erkennen, indem strukturelle Invarianten ihrer Formate validiert werden, anstatt sich auf ByteâSignaturen zu verlassen. Der Ansatz verallgemeinert ĂŒber Samples, polymorphe Varianten und zukĂŒnftige Exploits, die dieselbe ParserâLogik missbrauchen.
Kernidee: strukturelle Unmöglichkeiten und feldĂŒbergreifende Inkonsistenzen zu kodieren, die nur auftreten, wenn ein verwundbarer Decoder-/ParserâZustand erreicht wird.
Siehe auch:
Why structure, not signatures
Wenn weaponisierte Samples nicht verfĂŒgbar sind und PayloadâBytes mutieren, versagen traditionelle IOC-/YARAâPatterns. Strukturelle Erkennung prĂŒft das deklarierte Layout des Containers gegenĂŒber dem, was fĂŒr die FormatâImplementierung mathematisch oder semantisch möglich ist.
Typische PrĂŒfungen:
- Validiere TabellengröĂen und Grenzen, abgeleitet aus der Spezifikation und sicheren Implementierungen
- Markiere illegale/undokumentierte Opcodes oder ZustandsĂŒbergĂ€nge in eingebettetem Bytecode
- KreuzprĂŒfe Metadaten gegen tatsĂ€chlich kodierte StreamâKomponenten
- Erkenne widersprĂŒchliche Felder, die auf ParserâVerwirrung oder IntegerâOverflowâSetups hinweisen
Nachfolgend konkrete, feldgetestete Muster fĂŒr mehrere hochwirksame Chains.
PDF/JBIG2 â FORCEDENTRY (CVEâ2021â30860)
Target: JBIG2âSymbolâDictionaries, eingebettet in PDFs (hĂ€ufig verwendet beim mobilen MMSâParsing).
Strukturelle Signale:
- WidersprĂŒchlicher DictionaryâZustand, der in benignem Inhalt nicht auftreten kann, aber erforderlich ist, um den Overflow in der arithmetischen Dekodierung auszulösen.
- VerdĂ€chtige Nutzung globaler Segmente in Kombination mit abnormalen Symbolzahlen wĂ€hrend der RefinementâCodierung.
PseudoâLogik:
# 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:
- Identifiziere und extrahiere JBIG2 streams aus dem PDF
- pdfid/pdf-parser/peepdf zum Auffinden und Dumpen der Streams
- ĂberprĂŒfe arithmetic coding flags und symbol dictionary parameters anhand der JBIG2 spec
Notes:
- Funktioniert ohne embedded payload signatures
- Niedrige FP-Rate in der Praxis, da der markierte Zustand mathematisch inkonsistent ist
WebP/VP8L â BLASTPASS (CVEâ2023â4863)
Target: WebP lossless (VP8L) Huffman prefixâcode tables.
Strukturelle Signale:
- Die GesamtgröĂe der konstruierten Huffman-Tabellen ĂŒberschreitet die sichere Obergrenze, die von den Referenz-/gepatchten Implementierungen erwartet wird, was die Voraussetzung fĂŒr einen Ăberlauf impliziert.
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:
- PrĂŒfe WebP-Container-Chunks: VP8X + VP8L
- Analysiere VP8L-PrĂ€fixcodes und berechne die tatsĂ€chlich zugewiesenen TabellengröĂen
Hinweise:
- Robust gegenĂŒber byteâlevel polymorphism der Payload
- Die Grenze wird aus upstream-Limits/Patch-Analysen abgeleitet
TrueType â TRIANGULATION (CVEâ2023â41990)
Ziel: TrueType-Bytecode innerhalb von fpgm/prep/glyf-Programmen.
Strukturelle Signale:
- Vorhandensein undokumentierter/verbotener opcodes im Apple-Interpreter, die von der Exploit-Kette genutzt werden.
PseudoâLogik:
# Flag undocumented TrueType opcodes leveraged by TRIANGULATION
switch opcode:
case 0x8F, 0x90:
mark_malicious("Undocumented TrueType bytecode")
default:
continue
Praktische Triage:
- Font-Tabellen ausgeben (z. B. mit fontTools/ttx) und fpgm/prep/glyf-Programme scannen
- Es ist nicht nötig, den Interpreter vollstĂ€ndig zu emulieren, um aus PrĂ€senzprĂŒfungen Nutzen zu ziehen
Anmerkungen:
- Kann seltene FPs erzeugen, wenn nichtstandardmĂ€Ăige Fonts unbekannte Opcodes enthalten; mit sekundĂ€ren Tools validieren
DNG/TIFF â CVEâ2025â43300
Target: DNG/TIFF image metadata VS actual component count in encoded stream (e.g., JPEGâLossless SOF3).
Strukturelle Signale:
- Inkonsistenz zwischen EXIF/IFD-Feldern (SamplesPerPixel, PhotometricInterpretation) und der aus dem Image-Stream-Header geparsten Komponentenanzahl, die die Pipeline verwendet.
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
- Eingebetteten JPEGâLossless-Header (SOF3) finden und parsen; Komponentenanzahl vergleichen
Hinweise:
- In freier Wildbahn als ausgenutzt gemeldet; ausgezeichneter Kandidat fĂŒr strukturelle KonsistenzprĂŒfungen
DNG/TIFF â Samsung libimagecodec.quram.so (CVEâ2025â21042) + AngehĂ€ngte ZIP payload (LANDFALL)
Ziel: DNG (von TIFF abgeleitete) Bilder, die ein eingebettetes ZIP-Archiv enthalten, das am EOF angehÀngt ist, um native payloads nach Parser RCE zu stagen.
Strukturale Signale:
- Datei-Magic zeigt TIFF/DNG (
II*\x00orMM\x00*) aber der Dateiname imitiert JPEG (z. B..jpg/.jpegWhatsApp-Namensgebung). - Vorhandensein eines ZIP Local File Header oder EOCD-Magic nahe EOF (
PK\x03\x04orPK\x05\x06), das von keinem TIFF IFD-Datenbereich (strips/tiles/JPEGInterchangeFormat) referenziert wird. - Ungewöhnlich groĂe nachlaufende Daten jenseits des zuletzt referenzierten IFD-Datenblocks (hundert KB bis MB), konsistent mit einem gebĂŒndelten Archiv von .so-Modulen.
Pseudoâlogic:
# 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)")
Praktische Triage:
- Format vs. Name identifizieren:
- file sample; exiftool -s -FileType -MIMEType sample
- ZIP-Footer/-Header nahe EOF lokalisieren und 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
- SinnprĂŒfung: TIFF-Datenbereiche dĂŒrfen sich nicht mit dem carved ZIP-Bereich ĂŒberschneiden:
- tiffdump -D sample.dng | egrep âStripOffsets|TileOffsets|JPEGInterchangeFormat|StripByteCounts|TileByteCounts|JPEGInterchangeFormatLengthâ
- ĂberprĂŒfe
max(offset+length) << zip_off - Oneâshot carving (coarse): binwalk -eM sample.dng
Hinweise:
- Wurde in freier Wildbahn gegen Samsungâs libimagecodec.quram.so (CVEâ2025â21042) ausgenutzt. Das angehĂ€ngte ZIP enthielt native Module (z. B. loader + SELinux policy editor), die nach der RCE extrahiert/ausgefĂŒhrt wurden.
Implementierungsmuster und Leistung
Ein praktischer Scanner sollte:
- DateiÂtyp automatisch erkennen und nur relevante Analyzer einsetzen (PDF/JBIG2, WebP/VP8L, TTF, DNG/TIFF)
- Streaming/teilweises Parsen verwenden, um Speicherallokationen zu minimieren und frĂŒhe Beendigung zu ermöglichen
- Analysen parallel ausfĂŒhren (threadâpool) fĂŒr BulkâTriage
BeispielâWorkflow mit ElegantBouncer (openâsource RustâImplementierung dieser 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 Tipps und RandfÀlle
- Eingebettete Objekte: PDFs können Bilder (JBIG2) und Schriftarten (TrueType) einbetten; extrahieren und rekursiv scannen
- Sicherheit bei Dekompression: Bibliotheken verwenden, die Tabellen/Puffer vor der Allokation strikt begrenzen
- Fehlalarme: Regeln konservativ halten, WidersprĂŒche bevorzugen, die laut Spezifikation unmöglich sind
- Versionsdrift: Grenzen neu bestimmen (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
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
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.


