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
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
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:
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:
# 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 :
# 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 :
# 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:
# 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):
# 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
- 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
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
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.