
Lehrreiche Analyse von CVE-2024-9680, einer Use-after-free-Sicherheitslücke in der CSS Animation Timeline von Firefox, mit detaillierten Exploit-Mechanismen und konzeptionellen Codebeispielen.
Ein Angreifer konnte durch die Ausnutzung eines Use-after-Free-Fehlers in Animationstimelines Codeausführung im Content-Prozess erreichen. Es liegen Berichte vor, dass diese Schwachstelle in freier Wildbahn ausgenutzt wurde. Diese Schwachstelle betrifft Firefox < 131.0.2, Firefox ESR < 128.3.1, Firefox ESR < 115.16.1, Thunderbird < 131.0.1, Thunderbird < 128.3.1 und Thunderbird < 115.16.0.
Quelle: Fireship
Eine „Use-after-Free"-Schwachstelle ist eine Art von Speicherkorruptionsproblem, das auftritt, wenn ein Programm weiterhin einen Zeiger (oder eine Referenz) auf Speicher verwendet, nachdem dieser freigegeben (deallokiert) wurde. Dies ist ein gefährlicher Zustand, da der betreffende Speicher nicht mehr vom Programm besessen wird, was bedeutet, dass er für einen anderen Zweck neu zugewiesen oder von anderen Teilen des Programms verändert werden könnte. Wenn das Programm diesen freigegebenen Speicher weiterhin verwendet, kann dies zu unvorhersehbarem Verhalten führen, einschließlich Abstürzen, Datenkorruption oder Ausnutzung durch Angreifer.
Speicherzuweisung und -freigabe:
malloc() oder new), und geben ihn frei, wenn sie damit fertig sind (z. B. mit free() oder delete).Das Problem:
Konsequenzen:
Betrachten wir ein vereinfachtes Beispiel in C:
#include <stdlib.h>
#include <stdio.h>
int main() {
int *ptr = (int *)malloc(sizeof(int)); // Allocate memory
*ptr = 42; // Use the allocated memory
free(ptr); // Free the memory
// Use the pointer after freeing the memory (use-after-free)
printf("%d\n", *ptr); // Undefined behavior, potential crash or exploit
return 0;
}
Im Beispiel:
free(ptr) freigegeben.ptr weiterhin verwendet (in der printf()-Anweisung dereferenziert), was zu undefiniertem Verhalten führt. Der Speicher könnte neu zugewiesen worden sein, und der Zugriff darauf könnte zu einem Absturz führen oder, in einem gefährlicheren Szenario, zur Ausnutzung des Programms.Angreifer können Use-after-Free-Schwachstellen ausnutzen, indem sie die Speicherverwaltung sorgfältig manipulieren. So könnte ein Angreifer diese Schwachstelle potenziell ausnutzen:
Um Use-after-Free-Schwachstellen zu verhindern, können Entwickler:
NULL setzen: Dies stellt sicher, dass das Programm, wenn ein Zeiger versehentlich nach der Freigabe verwendet wird, vorhersehbarer abstürzt oder sich kontrolliert verhält, anstatt auf ungültigen Speicher zuzugreifen.std::shared_ptr, std::unique_ptr) dazu beitragen, Speicher automatisch zu verwalten und die Wahrscheinlichkeit manueller Speicherfehlverwaltung zu verringern.In diesem speziellen Fall interagierte die CSS-Animationstimeline – die für die Steuerung des Timings von Animationen auf einer Webseite verantwortlich ist – auf eine Weise mit anderen Browserkomponenten, dass ein Objekt, das an die Timeline der Animation gebunden war, freigegeben wurde, der Browser es jedoch weiterhin verwendete.