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
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.

Use-After-Free

hacking

Définition

Use-After-Free (UAF) est une classe de vulnérabilités mémoire où du code accède à une zone mémoire (heap) après qu'elle a été libérée via free() ou delete. Cette vulnérabilité peut permettre à un attaquant de contrôler le comportement du programme en manipulant les données de la zone mémoire libérée avant qu'elle soit réutilisée. Le cycle de vie d'une vulnérabilité UAF est le suivant : un objet est alloué sur le heap, une référence (pointeur) vers cet objet est conservée, l'objet est libéré (free/delete), mais le pointeur reste actif (dangling pointer). Si l'attaquant peut contrôler ce qui est alloué dans la zone mémoire libérée avant que le pointeur soit réutilisé, il peut substituer ses propres données aux données originales de l'objet. L'exploitation typique d'un UAF utilise des techniques de heap spraying ou de heap grooming pour s'assurer que la zone mémoire libérée est réutilisée avec des données contrôlées par l'attaquant. Si l'objet libéré est un vtable de classe C++ (contenant des pointeurs de fonctions virtuelles), remplacer le vtable par un faux vtable avec des pointeurs vers du code contrôlé permet une exécution de code arbitraire lorsqu'une méthode virtuelle est appelée sur le pointeur dangling. Les navigateurs web (Chrome, Firefox, Safari, Edge) sont particulièrement affectés par les UAF en raison de leur architecture JavaScript complexe avec collecte automatique de mémoire, nombreux objets alloués dynamiquement, et code C++ massivement utilisant la mémoire heap. Des séries de CVE critiques affectant les navigateurs (CVE-2021-30551 pour Chrome, CVE-2022-26700 pour WebKit) exploitent des UAF dans les moteurs JavaScript. Les mitigations modernes incluent : les allocateurs de mémoire sécurisés (PartitionAlloc de Chrome, jemalloc de Firefox) qui séparent les allocations par type pour compliquer le contrôle post-libération, Safe Stack pour détecter les utilisations de pointeurs invalidés, et les sanitizers de compilation (AddressSanitizer détecte les UAF en développement). Les mécanismes GC (Garbage Collection) dans les langages modernes éliminent par conception cette classe de vulnérabilités.

Fonctionnement

L'exploitation UAF suit généralement 3 phases : 1) déclencher la libération de l'objet vulnérable tout en conservant le dangling pointer, 2) allouer un objet contrôlé de la même taille pour recycler la zone mémoire (heap grooming/spraying pour contrôler le timing), 3) déclencher l'utilisation du dangling pointer qui pointe maintenant vers les données de l'attaquant. En JavaScript, cette manipulation peut souvent être orchestrée entièrement depuis le code de la page web.

Exploitation offensive

Les UAF dans les navigateurs permettent des compromissions drive-by : une simple visite d'une page web malveillante peut déclencher une exploitation UAF, obtenir une exécution de code dans le contexte du navigateur, puis enchaîner avec un sandbox escape pour compromettre le système sous-jacent. Les CVE UAF affectant Chrome/Firefox/IE ont historiquement été parmi les plus exploitées dans des campagnes APT.

Détection et mitigation

Les mitigations de compilation (AddressSanitizer, ASAN en développement) détectent les UAF lors des tests. En production : utilisation de smart pointers (std::unique_ptr, std::shared_ptr en C++), allocateurs sécurisés (PartitionAlloc), et contrôle de la durée de vie des objets. Les EDR avec memory protection (Guard pages, Heap validation) peuvent détecter certains UAF en production.

Articles liés

Un projet cybersécurité ?

Expert dispo · Réponse 24h

Devis