Définition
Une erreur survenant lorsque du code accède à de la mémoire (ou à une autre ressource) après qu'elle a été désallouée ou libérée, entraînant un comportement indéfini, corruption de données, plantages ou vulnérabilités de sécurité.

Principe

Principe
L'utilisation après libération est causée par des références pendantes : les contrats d'ownership ou de durée de vie sont violés de sorte qu'un pointeur/référence survit à l'objet qu'il réfère. Dans les langages non sécurisés mémoire cela produit une sémantique indéfinie ; dans les runtimes gérés cela survient quand des objets sont ressuscités ou la mémoire native est mal gérée.

Démonstration

Démonstration
Une fonction libère un objet puis retourne ; une routine ultérieure détient toujours le pointeur et écrit dedans. Selon le comportement de l'allocation, la mémoire peut avoir été réutilisée pour un autre objet, provoquant une corruption silencieuse ou un crash lors de l'accès.

Mauvaise application

Mauvaise application
Confondre use‑after‑free avec double‑free, déréférencement NULL ou valeurs en cache périmées ; ou supposer qu'il ne cause que des plantages alors qu'il peut engendrer des corruptions subtiles ou une exécution de code à distance dans des contextes exploitables.

Conséquence

Conséquence
Reconnaître correctement l'utilisation après libération conduit à des atténuations : adopter des modèles d'ownership, détecteurs use‑after‑free, sanitizers mémoire, langages sûrs, invalidation de pointeurs et analyses de durée de vie. Non traité, il conduit à des défaillances de fiabilité et des failles de sécurité.

Inversion

Inversion
L'inverse est une sécurité mémoire forte : les références ne peuvent pas survivre à leur référent, soit par enforcement automatique de durée de vie, vérification d'emprunt, soit par contrôles d'exécution empêchant tout accès après libération.

Limite

Limite
Concerne l'accès direct à la mémoire et d'autres violations de durée de vie d'objets (descripteurs de fichiers, ressources GPU). Exclut l'usage de valeurs en cache périmées mais toujours valides, et diffère du double‑free (libération double) et de la fuite (absence de libération). Le comportement dépend souvent de l'allocateur et de la plateforme.

Tension sémantique

Tension sémantique
Tension avec use‑after‑move et références obsolètes dans les langages gérés : certains langages définissent des moves qui invalident les références en toute sécurité, tandis que d'autres permettent des résurrections ou des finaliseurs qui complexifient le raisonnement sur la durée de vie.

Synthèse

Synthèse
L'utilisation après libération regroupe les bugs où une référence survit à sa cible et est ensuite utilisée, produisant un comportement indéfini et souvent exploitable ; la prévenir nécessite discipline sur la durée de vie/ownership, outils sanitizers ou mécanismes de sécurité mémoire.