Détection d’exploits de formats de fichiers structurels (0‑Click Chains)
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 0‑click mobile exploit files en validant des invariants structurels de leurs formats au lieu de se fier aux signatures d’octets. L’approche se généralise entre les échantillons, les variantes polymorphes et les futurs exploits qui abusent de la même logique de parser.
Idée clé : encoder des impossibilités structurelles et des incohérences inter‑champs qui n’apparaissent que lorsque l’état vulnérable du décodeur/analyseur est atteint.
Voir aussi :
Pourquoi la structure plutôt que les signatures
Lorsque des weaponized samples ne sont pas disponibles et que les payload bytes mutent, les patterns IOC/YARA traditionnels échouent. La détection structurelle inspecte la disposition déclarée du conteneur par rapport à ce qui est mathématiquement ou sémantiquement possible pour l’implémentation du format.
Vérifications typiques :
- Valider les tailles de tables et les bornes dérivées de la spécification et des implémentations sûres
- Signaler des opcodes illégaux/non documentés ou des transitions d’état dans du bytecode embarqué
- Recouper les metadata VS les composants réellement encodés du flux
- Détecter des champs contradictoires indiquant une confusion du parser ou des configurations visant à provoquer un integer overflow
Ci‑dessous des patterns concrets, testés sur le terrain, pour plusieurs chaînes à fort impact.
PDF/JBIG2 – FORCEDENTRY (CVE‑2021‑30860)
Target: JBIG2 symbol dictionaries embedded inside PDFs (often used in mobile MMS parsing).
Signaux structurels :
- État contradictoire du dictionnaire qui ne peut pas survenir dans un contenu bénin mais qui est requis pour déclencher l’overflow dans l’arithmetic decoding.
- Usage suspect de global segments combiné à des comptes de symboles anormaux pendant le refinement coding.
Pseudo‑logique:
# 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 flux JBIG2 du PDF
- pdfid/pdf-parser/peepdf pour localiser et dumper les flux
- Vérifier les indicateurs de codage arithmétique et les paramètres du dictionnaire de symboles par rapport à la spécification JBIG2
Remarques :
- Fonctionne sans signatures de payload intégrées
- Faible taux de FP en pratique, car l’état signalé est mathématiquement incohérent
WebP/VP8L – BLASTPASS (CVE‑2023‑4863)
Cible : tables de codes préfixes Huffman de WebP sans perte (VP8L).
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 condition préalable au débordement.
Pseudo‑logique :
# 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 codes de préfixe VP8L et calculer les tailles réelles des tables allouées
Notes :
- Robuste contre le polymorphisme au niveau des octets du payload
- La borne est dérivée des limites en amont / de l’analyse des patchs
TrueType – TRIANGULATION (CVE‑2023‑41990)
Target: TrueType bytecode inside fpgm/prep/glyf programs.
Structural signals :
- 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 :
- Dump des tables de polices (e.g., using fontTools/ttx) et analyser les programmes fpgm/prep/glyf
- Pas besoin d’émuler complètement l’interpréteur pour obtenir de la valeur à partir de vérifications de présence
Remarques :
- Peut produire de rares faux positifs (FP) si des polices non standard incluent des opcodes inconnus ; valider avec des outils secondaires
DNG/TIFF – CVE‑2025‑43300
Cible : métadonnées d’image DNG/TIFF VS le nombre réel de composants dans le flux encodé (e.g., JPEG‑Lossless SOF3).
Signaux structurels :
- Incohérence entre les champs EXIF/IFD (SamplesPerPixel, PhotometricInterpretation) et le nombre de composants analysé à partir de 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")
Triage pratique :
- Parse les IFD primaires et les tags EXIF
- Localiser et parser l’en-tête JPEG‑Lossless embarqué (SOF3) et comparer le nombre de composants
Notes :
- Signalé exploité en conditions réelles ; excellent candidat pour des vérifications de cohérence structurelle
DNG/TIFF – Samsung libimagecodec.quram.so (CVE‑2025‑21042) + Appended ZIP payload (LANDFALL)
Cible : images DNG (TIFF‑derived) contenant une archive ZIP embarquée ajoutée en EOF pour mettre en place des payloads natifs après un RCE du parser.
Signaux structurels :
- L’en-tête magique du fichier indique TIFF/DNG (
II*\x00ouMM\x00*) mais le nom de fichier imite JPEG (p.ex.,.jpg/.jpegnommage WhatsApp). - Présence d’un ZIP Local File Header ou d’une signature EOCD près de EOF (
PK\x03\x04ouPK\x05\x06) qui n’est référencée par aucune région de données TIFF IFD (strips/tiles/JPEGInterchangeFormat). - Données finales anormalement volumineuses au-delà du dernier bloc de données IFD référencé (des centaines de KB à MB), cohérent avec une archive groupée de modules .so.
Pseudo‑logique :
# 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)")
Triage pratique :
- Identifier le format vs le nom :
- file sample; exiftool -s -FileType -MIMEType sample
- Localiser le footer/header ZIP près de EOF et 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
- Vérifier que les régions de données TIFF ne chevauchent pas la région ZIP carved :
- tiffdump -D sample.dng | egrep ‘StripOffsets|TileOffsets|JPEGInterchangeFormat|StripByteCounts|TileByteCounts|JPEGInterchangeFormatLength’
- Vérifier
max(offset+length) << zip_off - One‑shot carving (coarse): binwalk -eM sample.dng
Notes :
- Exploité dans la nature contre la libimagecodec.quram.so de Samsung (CVE‑2025‑21042). L’archive ZIP ajoutée contenait des modules natifs (p.ex., loader + SELinux policy editor) extraits/exécutés post‑RCE.
Modèles d’implémentation et performances
Un scanner pratique doit :
- Auto‑détecter le type de fichier et lancer uniquement les analyseurs pertinents (PDF/JBIG2, WebP/VP8L, TTF, DNG/TIFF)
- Parser en flux / partiellement pour minimiser les allocations et permettre une terminaison anticipée
- Exécuter les analyses en parallèle (thread‑pool) pour le triage en masse
Exemple de flux de travail avec ElegantBouncer (implémentation open‑source en Rust 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
Conseils DFIR et cas limites
- Objets embarqués : les PDFs peuvent intégrer des images (JBIG2) et des polices (TrueType) ; extraire et analyser récursivement
- Sécurité de la décompression : utiliser des bibliothèques qui limitent strictement les tables/tampons avant allocation
- Faux positifs : maintenir des règles conservatrices, privilégier les contradictions impossibles selon la spécification
- Dérive de version : réinitialiser les bornes de référence (e.g., VP8L table sizes) lorsque les parseurs upstream modifient les 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 – exporte 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
- LANDFALL: New Commercial-Grade Android Spyware in Exploit Chain Targeting Samsung Devices
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.
HackTricks

