Aller au contenu principal
Expert Cybersécurité & IAv9.0
Centres de ressources conformité
Besoin d'un accompagnement expert ?
Devis personnalisé sous 24h — audit, conformité, incident
Outils open source — Gratuits, portables, hors ligne
Caractéristiques communes
100 % hors ligne — aucune donnée transmise
Portables — un seul fichier exécutable
Gratuits — MIT ou GPL v3
Code source ouvert sur GitHub
Checklists Sécurité — Audit & Durcissement
Formats disponibles
📄 PDF 📊 Excel 🌐 Web

11 checklists professionnelles couvrant 2 200+ points de contrôle. Téléchargement gratuit, aucune inscription.

Academy Contact

Type Confusion

hacking

Définition

La type confusion (confusion de type) est une classe de vulnérabilités où du code accède à une ressource (objet, mémoire, donnée) en utilisant un type incompatible avec le type réel de la ressource. Dans les langages avec typage fort et vérification statique, ces erreurs sont souvent interceptées à la compilation. Dans les langages dynamiques ou les systèmes d'exécution complexes (JIT, parsers, protocoles binaires), elles peuvent subsister et être exploitables. Dans les moteurs JavaScript et les compilateurs JIT, la type confusion est une source importante de vulnérabilités critiques. Le moteur JIT peut optimiser du code en supposant qu'une variable est toujours d'un certain type, mais si cette hypothèse est invalidée à l'exécution, l'accès aux données sous le mauvais type peut révéler ou corrompre de la mémoire. Des vulnérabilités comme CVE-2021-21220 (Chrome V8) ou les nombreuses WebKit type confusion CVE exploitent ce principe. En C++, les type confusion surviennent fréquemment dans des hiérarchies d'héritage complexes : un downcast incorrect (conversion d'un pointeur de classe base vers une classe dérivée sans vérification de type) peut permettre d'accéder à des membres qui n'existent pas dans l'objet réel, potentiellement dans des zones mémoire adjacentes. Des vtables corrompues ou des unions mal utilisées peuvent également causer des confusions de type exploitables. Dans les protocoles binaires et les parsers, les type confusions surviennent quand un champ de type est sous le contrôle de l'attaquant et détermine comment les données suivantes sont interprétées. En interprétant des données entières comme des pointeurs, ou un tableau d'octets comme un tableau d'objets, l'attaquant peut construire des primitifs de lecture/écriture arbitraire. L'exploitation d'une type confusion dans un navigateur suit généralement ce schéma : déclencher la confusion pour obtenir un objet JavaScript de type A traité comme type B, utiliser la confusion pour obtenir un primitif de lecture/écriture relative dans la mémoire du processus, puis obtenir un primitif d'exécution arbitraire en corrompant un pointeur de fonction ou une vtable.

Fonctionnement

En JavaScript, la type confusion dans un moteur JIT : une fonction optimisée suppose qu'un argument est toujours un entier, mais est appelée avec un objet. Le code généré par le JIT accède à l'objet à l'offset d'un entier, interprétant les bits du pointeur interne de l'objet comme un entier. Cette valeur peut être utilisée pour construire un primitif de lecture de la structure interne de l'objet, exposant des adresses mémoire et permettant de calculer les positions ASLR.

Exploitation offensive

Les type confusions dans les moteurs JavaScript/WebAssembly sont parmi les vulnérabilités les plus critiques des navigateurs car elles sont souvent exploitables depuis une simple page web. La chaîne type confusion → addrOf/fakeObj primitives → arbitrary read/write → code execution constitue le schéma standard des exploitations de navigateurs présentées à Pwn2Own.

Détection et mitigation

Dans les moteurs JIT : vérifications de garde avant les optimisations (guard checks), déoptimisation sur violation de type. En C++ : utilisation de dynamic_cast (avec vérification de type au runtime), éviter les unions anonymes avec des types hétérogènes, compilation avec -fno-strict-aliasing pour les cas ambigus. Les fuzzer de type confusion (comme les fuzzers de moteurs JavaScript) génèrent des cas de test ciblant spécifiquement les inconsistances de types.

Articles liés

Un projet cybersécurité ?

Expert dispo · Réponse 24h

Devis