Détection d'exploits de formats de fichiers structurés (0‑Click Chains)

Reading time: 7 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Cette page résume des techniques pratiques pour détecter des fichiers d'exploit mobiles 0‑click en validant les invariants structurels de leurs formats au lieu de s'appuyer sur des signatures d'octets. L'approche se généralise aux échantillons, variantes polymorphes et futurs exploits qui abusent de la même logique de parser.

Key idea: encode structural impossibilities and cross‑field inconsistencies that only appear when a vulnerable decoder/parser state is reached.

See also:

PDF File analysis

Why structure, not signatures

When weaponized samples are unavailable and payload bytes mutate, traditional IOC/YARA patterns fail. Structural detection inspects the container’s declared layout versus what is mathematically or semantically possible for the format implementation.

Typical checks:

  • Valider les tailles de tables et les bornes dérivées de la spécification et des implémentations sûres
  • Signaler les opcodes illégaux/non documentés ou les transitions d'état dans le bytecode embarqué
  • Vérifier la cohérence des métadonnées par rapport aux composants réels du flux encodé
  • Détecter des champs contradictoires qui indiquent une confusion du parser ou des configurations provoquant un integer overflow

Below are concrete, field‑tested patterns for multiple high‑impact chains.


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

Target: JBIG2 symbol dictionaries embedded inside PDFs (often used in mobile MMS parsing).

Structural signals:

  • État contradictoire du dictionnaire qui ne peut pas se produire dans un contenu bénin mais qui est nécessaire pour déclencher le débordement dans le décodage arithmétique.
  • Utilisation suspecte de segments globaux combinée à des décomptes de symboles anormaux lors du codage par raffinage.

Pseudo‑logic:

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

Triage pratique :

  • Identifier et extraire les JBIG2 streams du PDF
  • pdfid/pdf-parser/peepdf pour localiser et dumper les streams
  • Vérifier les flags de codage arithmétique et les paramètres du symbol dictionary par rapport à la spec JBIG2

Notes :

  • Fonctionne sans signatures de payload intégrées
  • Faible taux de faux positifs (FP) en pratique car l'état signalé est mathématiquement incohérent

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

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

Signaux structurels :

  • La taille totale des tables Huffman construites dépasse la borne supérieure sûre attendue par les implémentations de référence/corrigées, impliquant la précondition de débordement.

Pseudo‑logic :

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

Triage pratique :

  • Vérifier les chunks du conteneur WebP : VP8X + VP8L
  • Parser les prefix codes VP8L et calculer les tailles réelles des tables allouées

Notes :

  • Robuste face au polymorphisme au niveau des octets du payload
  • La borne est dérivée des limites en amont et de l'analyse des patchs

TrueType – TRIANGULATION (CVE‑2023‑41990)

Cible : bytecode TrueType à l'intérieur des programmes fpgm/prep/glyf.

Signaux structurels :

  • Présence d'opcodes non documentés/interdits dans l'interpréteur d'Apple utilisé par l'exploit chain.

Pseudo‑logique :

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

Triage pratique :

  • Extraire les tables de polices (par ex., en utilisant fontTools/ttx) et scanner les programmes fpgm/prep/glyf
  • Pas besoin d'émuler complètement l'interpréteur pour tirer parti des vérifications de présence

Notes :

  • Peut produire de rares FPs si des polices non standard incluent des opcodes inconnus ; valider avec des outils secondaires

DNG/TIFF – CVE‑2025‑43300

Cible : métadonnées image DNG/TIFF par rapport au nombre réel de composants dans le flux encodé (par ex., JPEG‑Lossless SOF3).

Signaux structurels:

  • Incohérence entre les champs EXIF/IFD (SamplesPerPixel, PhotometricInterpretation) et le nombre de composants analysé depuis l'en-tête du flux image utilisé par le pipeline.

Pseudo‑logique:

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

Practical triage:

  • Parser les balises IFD primaires et EXIF
  • Localiser et parser l'en‑tête JPEG‑Lossless embarqué (SOF3) et comparer le nombre de composants

Notes:

  • Signalé comme exploité dans la nature ; excellent candidat pour des vérifications de cohérence structurelle

Implementation patterns and performance

A practical scanner should:

  • Détecter automatiquement le type de fichier et lancer uniquement les analyseurs pertinents (PDF/JBIG2, WebP/VP8L, TTF, DNG/TIFF)
  • Traiter en flux / analyser partiellement pour minimiser les allocations et permettre un arrêt anticipé
  • Exécuter les analyses en parallèle (thread‑pool) pour le tri en masse

Exemple de workflow avec ElegantBouncer (implémentation Rust open‑source de ces vérifications):

bash
# 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 conseils et cas limites

  • Objets intégrés: Les PDFs peuvent intégrer des images (JBIG2) et des polices (TrueType) ; extraire et analyser récursivement
  • Sécurité lors de la décompression: utiliser des bibliothèques qui limitent strictement les tables/tampons avant allocation
  • Faux positifs: garder des règles conservatrices, privilégier les contradictions impossibles selon la spécification
  • Dérive des versions: réétalonner les bornes (e.g., VP8L table sizes) lorsque les parseurs en amont changent leurs limites

Outils associés

  • ElegantBouncer – scanner structurel pour les détections ci‑dessus
  • pdfid/pdf-parser/peepdf – extraction d'objets PDF et analyse statique
  • pdfcpu – linter/sanitiseur PDF
  • fontTools/ttx – exporter les tables TrueType et le bytecode
  • exiftool – lire les métadonnées TIFF/DNG/EXIF
  • dwebp/webpmux – analyser les métadonnées et chunks WebP

Références

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks