Débordement de tas
Qu'est-ce que Débordement de tas ?
Débordement de tasUn débordement de tampon qui survient dans la mémoire allouée dynamiquement, corrompant souvent les métadonnées de l'allocateur, des pointeurs de fonction ou les tables virtuelles d'objets.
Un débordement de tas écrit au-delà de la fin d'un tampon alloué sur le tas, écrasant les blocs (chunks) adjacents ou les métadonnées de gestion administrées par malloc/free, jemalloc, mimalloc ou d'autres allocateurs. Contrairement aux débordements de pile, il n'y a pas d'adresse de retour à détourner directement ; à la place, les attaquants corrompent des données auxquelles le programme fera confiance ultérieurement — le pointeur de fonction d'un objet adjacent, un pointeur de vtable C++, le bloc de contrôle d'un smart pointer, ou les liens de la liste libre de l'allocateur utilisés lors de free() (la primitive classique dite « unlink »).
Comme l'agencement du tas est non déterministe, l'exploitation dépend du heap grooming / feng shui : effectuer des allocations et des libérations contrôlées afin qu'une cible utile se place immédiatement après le tampon vulnérable. Un cas réel emblématique est GHOST (CVE-2015-0235), un débordement de tas dans la fonction __nss_hostname_digits_dots() de la glibc, atteignable via gethostbyname() ; Qualys a démontré en 2015 une exécution de code à distance complète contre le serveur de messagerie Exim, et la faille existait silencieusement depuis la glibc 2.2. CVE-2018-4407 a illustré la même classe de faille dans le noyau XNU d'Apple, déclenchable à distance par un unique paquet TCP forgé.
flowchart TD
A[Allouer l'objet victime + tampon vulnérable de façon adjacente] --> B[Le heap grooming place la cible après le tampon]
B --> C[Le débordement écrit au-delà de la fin du tampon]
C --> D{Cible corrompue}
D -->|Métadonnées de l'allocateur| E[free unlink -> écriture arbitraire]
D -->|Pointeur de fonction / vtable| F[Détourner le flux de contrôle]
E --> G[Exécution de code]
F --> GLes défenses superposent le durcissement de l'allocateur (vérifications d'intégrité des métadonnées, unlink sécurisé, isolation des blocs, pages de garde) avec l'ASLR, la CFI, le sandboxing et la migration vers des langages sûrs en mémoire comme Rust. Les débordements de tas restent au cœur de l'exploitation des navigateurs, des noyaux et des analyseurs de documents, et figurent largement dans les chaînes gagnantes du Pwn2Own.
● Exemples
- 01
GHOST (CVE-2015-0235) — un débordement de tas dans gethostbyname de la glibc, atteignable via les serveurs de messagerie Exim.
- 02
CVE-2018-4407 — un débordement de tas dans les options TCP du noyau XNU, déclenchable à distance via le réseau.
● Questions fréquentes
Qu'est-ce que Débordement de tas ?
Un débordement de tampon qui survient dans la mémoire allouée dynamiquement, corrompant souvent les métadonnées de l'allocateur, des pointeurs de fonction ou les tables virtuelles d'objets. Cette notion relève de la catégorie Vulnérabilités en cybersécurité.
Que signifie Débordement de tas ?
Un débordement de tampon qui survient dans la mémoire allouée dynamiquement, corrompant souvent les métadonnées de l'allocateur, des pointeurs de fonction ou les tables virtuelles d'objets.
Comment se défendre contre Débordement de tas ?
Les défenses contre Débordement de tas combinent habituellement des contrôles techniques et des pratiques opérationnelles, comme détaillé dans la définition ci-dessus.
Quels sont les autres noms de Débordement de tas ?
Noms alternatifs courants : Débordement de tampon dans le tas.