
Analisi didattica di CVE-2024-9680, una vulnerabilità use-after-free nella CSS Animation Timeline di Firefox, con meccaniche di exploit dettagliate ed esempi di codice concettuali.
Un attaccante è riuscito a ottenere l'esecuzione di codice nel processo dei contenuti sfruttando una use-after-free nelle timeline delle animazioni. Abbiamo ricevuto segnalazioni di questa vulnerabilità sfruttata in natura. Questa vulnerabilità riguarda Firefox < 131.0.2, Firefox ESR < 128.3.1, Firefox ESR < 115.16.1, Thunderbird < 131.0.1, Thunderbird < 128.3.1 e Thunderbird < 115.16.0.
Crediti: Fireship
Una vulnerabilità "use-after-free" è un tipo di problema di corruzione della memoria che si verifica quando un programma continua a utilizzare un puntatore (o riferimento) alla memoria dopo che questa è stata liberata (deallocata). Questa è una condizione pericolosa perché la memoria in questione non è più di proprietà del programma, il che significa che potrebbe essere riassegnata per un altro scopo o alterata da altre parti del programma. Se il programma continua a utilizzare questa memoria liberata, può portare a comportamenti imprevedibili, inclusi crash, corruzione dei dati o sfruttamento da parte di attaccanti.
Allocazione e deallocazione della memoria:
malloc() o new) e la liberano quando hanno finito (ad esempio, con free() o delete).Il problema:
Conseguenze:
Considera un esempio semplificato 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;
}
Nell'esempio:
free(ptr).ptr viene ancora utilizzato (dereferenziato nell'istruzione printf()), il che porta a un comportamento indefinito. La memoria potrebbe essere stata riassegnata e l'accesso ad essa potrebbe causare un crash o, in uno scenario più pericoloso, lo sfruttamento del programma.Gli attaccanti possono sfruttare le vulnerabilità use-after-free manipolando attentamente la gestione della memoria. Ecco come un attaccante potrebbe potenzialmente utilizzare questa vulnerabilità:
Per prevenire le vulnerabilità use-after-free, gli sviluppatori possono:
NULL dopo averli liberati: ciò garantisce che, se un puntatore viene accidentalmente utilizzato dopo essere stato liberato, il programma vada in crash in modo più prevedibile o si comporti in modo controllato, piuttosto che accedere a memoria non valida.std::shared_ptr, std::unique_ptr) può aiutare a gestire la memoria automaticamente, riducendo le probabilità di una gestione manuale errata della memoria.In questo caso specifico, la timeline delle animazioni CSS—responsabile del controllo della temporizzazione delle animazioni in una pagina web—interagiva con altri componenti del browser in modo tale che un oggetto legato alla timeline dell'animazione veniva liberato, ma il browser continuava a utilizzarlo.