Double Free
hackingDéfinition
Double Free est une vulnérabilité mémoire où une zone mémoire précédemment libérée par free() est libérée une deuxième fois. Cette erreur peut corrompre les structures de gestion du heap de l'allocateur, permettant dans certains cas une exploitation pour obtenir une exécution de code arbitraire. Le comportement d'un double free dépend de l'allocateur utilisé. Sur les systèmes utilisant ptmalloc2 (glibc standard), un double free peut corrompre la liste doublement chaînée des chunks libres (bins). L'attaquant peut manipuler ces corruptions pour faire pointer un chunk libre vers une adresse mémoire arbitraire, obtenant ainsi une allocation dans cette zone lors du prochain malloc(). Les versions modernes de glibc incluent des détections de double free : la corruption detections via les champs prev_size et size des chunks, les tcache double free protections (vérification que le chunk n'est pas déjà dans le tcache), et les fastbin double free detections. Ces protections rendent les double free directs (libérer exactement le même chunk deux fois) souvent non-exploitables sur les systèmes récents. Des techniques permettent de contourner ces protections : insérer une libération d'un autre chunk entre les deux libérations du même chunk (pour tromper la vérification tcache), exploiter des races conditions dans des programmes multi-threadés (deux threads libérant simultanément le même objet), et cibler des allocateurs moins robustes (jemalloc avec une configuration différente, ou des allocateurs personnalisés sans ces vérifications). Des exemples réels : de nombreuses CVE dans des applications web (serveurs, parsers) impliquent des double free déclenchés par des entrées malformées. Les gestionnaires de connexions SSL/TLS ont historiquement souffert de double free lors du traitement d'erreurs, certaines permettant une exécution de code à distance. Le débogage avec Valgrind ou AddressSanitizer (ASAN) détecte les double free avec précision : ASAN rapporte 'double-free' avec le stack trace des deux libérations et de l'allocation originale, facilitant considérablement le diagnostic et la correction.
Fonctionnement
Sur glibc tcache (depuis glibc 2.26), la détection simple : lors d'un free(), si le chunk est déjà en tête du tcache (même adresse), abort(). Le bypass classique : free(A); free(B); free(A); // A est libéré deux fois mais pas consécutivement. Le tcache contient maintenant [A → B → A], un cycle. Le prochain malloc() retourne A, rend B, puis retourne A une deuxième fois. L'allocation de A avec des données contrôlées modifie le pointeur forward de A dans le tcache, permettant une allocation arbitraire.
Exploitation offensive
Tcache poisoning via double free est une technique d'exploitation moderne bien documentée dans la communauté CTF. Le primitive résultant (allocation à une adresse arbitraire) est utilisé pour écrire dans la GOT (si non Full RELRO), dans des pointeurs de fonctions, ou dans des structures de l'allocateur pour obtenir une exécution de code.
Détection et mitigation
ASAN en développement détecte immédiatement les double free. En production : smart pointers C++ (std::unique_ptr) dont le destructeur ne peut s'appeler qu'une fois, conventions d'initialisation à nullptr après free (ne résout pas le problème mais détecte les UAF), et allocateurs avec détection de double free (PartitionAlloc avec freelist de vérification).
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