
Analyse éducative de CVE-2024-9680, une vulnérabilité de type use-after-free dans la fonctionnalité CSS Animation Timeline de Firefox, avec des mécanismes d'exploitation détaillés et des exemples de code conceptuels.
Un attaquant a pu exécuter du code dans le processus de contenu en exploitant une use-after-free dans les timelines d'animation. Nous avons eu des signalements de cette vulnérabilité exploitée dans la nature. Cette vulnérabilité affecte Firefox < 131.0.2, Firefox ESR < 128.3.1, Firefox ESR < 115.16.1, Thunderbird < 131.0.1, Thunderbird < 128.3.1, et Thunderbird < 115.16.0.
Crédit : Fireship
Une vulnérabilité de type « use-after-free » est un problème de corruption mémoire qui survient lorsqu'un programme continue d'utiliser un pointeur (ou une référence) vers une mémoire après qu'elle a été libérée (désallouée). C'est une condition dangereuse car la mémoire en question n'est plus détenue par le programme, ce qui signifie qu'elle pourrait être réaffectée à un autre usage ou modifiée par d'autres parties du programme. Si le programme continue d'utiliser cette mémoire libérée, cela peut entraîner un comportement imprévisible, notamment des plantages, une corruption de données ou une exploitation par des attaquants.
Allocation et désallocation de mémoire :
malloc() ou new) et la libèrent lorsqu'ils ont fini (par exemple, avec free() ou delete).Le problème :
Conséquences :
Prenons un exemple simplifié en C :
#include <stdlib.h>
#include <stdio.h>
int main() {
int *ptr = (int *)malloc(sizeof(int)); // Allouer de la mémoire
*ptr = 42; // Utiliser la mémoire allouée
free(ptr); // Libérer la mémoire
// Utiliser le pointeur après avoir libéré la mémoire (use-after-free)
printf("%d\n", *ptr); // Comportement indéfini, plantage ou exploitation potentielle
return 0;
}
Dans cet exemple :
free(ptr).ptr est toujours utilisé (déréférencé dans l'instruction printf()), ce qui conduit à un comportement indéfini. La mémoire peut avoir été réassignée, et y accéder peut provoquer un plantage ou, dans un scénario plus dangereux, une exploitation du programme.Les attaquants peuvent exploiter les vulnérabilités de use-after-free en manipulant soigneusement la gestion de la mémoire. Voici comment un attaquant pourrait potentiellement utiliser cette vulnérabilité :
Pour prévenir les vulnérabilités de use-after-free, les développeurs peuvent :
NULL après les avoir libérés : Cela garantit que si un pointeur est accidentellement utilisé après avoir été libéré, le programme plantera de manière plus prévisible ou se comportera de manière contrôlée, plutôt que d'accéder à une mémoire invalide.std::shared_ptr, std::unique_ptr) peut aider à gérer la mémoire automatiquement, réduisant les risques de mauvaise gestion manuelle de la mémoire.Dans ce cas spécifique, la timeline d'animation CSS—qui est responsable du contrôle du timing des animations dans une page web—interagissait avec d'autres composants du navigateur de telle manière qu'un objet lié à la timeline de l'animation a été libéré, alors que le navigateur continuait à l'utiliser.