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

Heap Overflow

hacking

Définition

Le heap overflow est une vulnérabilité mémoire où une écriture dépasse les limites d'un tampon alloué sur le heap (tas), corrompant des données adjacentes dans le heap. Contrairement au stack overflow qui cible des structures de contrôle prévisibles (adresse de retour, saved base pointer), le heap overflow nécessite une compréhension approfondie des structures internes de l'allocateur mémoire. Les allocateurs de mémoire modernes (ptmalloc2 de glibc, jemalloc de Firefox, tcmalloc de Chrome) maintiennent des métadonnées de gestion des blocs (chunks) adjacentes aux données utilisateur. Un heap overflow corrompt souvent ces métadonnées (taille du chunk, pointeurs de liste chaînée dans les bins de l'allocateur), ce qui peut être exploité lors des opérations d'allocation/désallocation suivantes pour obtenir une écriture arbitraire. Les techniques d'exploitation du heap overflow incluent : la corruption de l'en-tête de chunk suivant (prev_size, size) pour manipuler la consolidation de chunks (unlink attack, house of force), la corruption de bins de l'allocateur (tcache poisoning, fastbin corruption) pour obtenir une allocation dans une zone mémoire arbitraire, et la corruption d'objets C++ adjacents (vtables, function pointers) pour rediriger l'exécution. La technique House of Force (obsolète sur glibc récent mais pédagogique) illustre l'exploitation : en overflowant le wilderness chunk (le chunk de mémoire libre restant), l'attaquant peut modifier sa taille pour qu'un prochain malloc() alloue un chunk à une adresse arbitraire. Les techniques modernes comme Tcache Poisoning exploitent les caches de l'allocateur pour allouer des chunks à des adresses contrôlées. Les heap grooming (arrangement préalable de l'état du heap pour créer des conditions exploitables) et le heap spraying (remplissage du heap avec des données contrôlées) sont des techniques préparatoires essentielles pour la réussite des exploitations heap.

Fonctionnement

Un heap overflow basique : allocation de deux buffers adjacents (buf1 = malloc(64), buf2 = malloc(64)), écriture au-delà de buf1 pour corrompre les métadonnées du chunk buf2 ou les données de buf2 si c'est un objet C++ avec vtable. La corruption de la taille du chunk suivant peut tromper l'allocateur lors d'un free() ultérieur, exécutant du code arbitraire dans la routine de gestion des bins.

Exploitation offensive

Les heap overflows sont courants dans les applications C/C++ traitant des données réseau (serveurs, clients). Une exploitation réussie permet typiquement une exécution de code arbitraire ou au minimum une corruption de données menant à une élévation de privilèges. Des navigateurs, serveurs web, et parsers de formats de fichiers (PDF, image, vidéo) ont historiquement souffert de heap overflows exploitables.

Détection et mitigation

AddressSanitizer (ASAN) et Valgrind détectent les heap overflows en développement. En production : allocateurs sécurisés avec guard pages (PartitionAlloc de Chrome isole les allocations par type), compilation avec -fstack-protector-strong (protège aussi les structures heap locales), et utilisation de langages memory-safe (Rust, Go) qui éliminent cette classe de vulnérabilités par design.

Articles liés

Un projet cybersécurité ?

Expert dispo · Réponse 24h

Devis