Heap Overflow
hackingDé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
Expert en cybersécurité offensive et intelligence artificielle. Pentest, audit et développement IA sur-mesure.
Services
- Audit Infrastructure
- Audit Kubernetes
- Audit Microsoft 365
- Audit Sécurité Réseau
- Analyse de Risques
- Audit Active Directory
- Audit Application Web
- Audit Cloud (AWS/Azure/GCP)
- Audit Messagerie
- Audit API (OWASP Top 10)
- Audit DevSecOps & CI/CD
- Audit Code Source (SAST)
- Audit Postes de Travail
- Audit Sauvegarde & Résilience
- Audit OT/SCADA (IEC 62443)
- Développement IA
- Formations
Ressources
Projets & Outils
© 2026 Ayi NEDJIMI Consultants. Tous droits réservés. 2.1.7
Un projet cybersécurité ?
Expert dispo · Réponse 24h