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

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:

PDF File analysis

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*\x00 or MM\x00*) aber der Dateiname imitiert JPEG (z. B. .jpg/.jpeg WhatsApp-Namensgebung).
  • Vorhandensein eines ZIP Local File Header oder EOCD-Magic nahe EOF (PK\x03\x04 or PK\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

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