
Análise educacional do CVE-2024-9680, uma vulnerabilidade use-after-free na Timeline de Animação CSS do Firefox, com mecânicas detalhadas de exploração e exemplos conceituais de código.
Um atacante conseguiu alcançar a execução de código no processo de conteúdo ao explorar um use-after-free (uso após liberação) em timelines de animação (Animation timelines). Recebemos relatos de que essa vulnerabilidade está sendo explorada na natureza. Essa vulnerabilidade afeta 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.
Créditos: Fireship
Uma vulnerabilidade de "use-after-free" (uso após liberação) é um tipo de problema de corrupção de memória que ocorre quando um programa continua a usar um ponteiro (ou referência) para a memória depois que ela foi liberada (desalocada). Essa é uma condição perigosa porque a memória em questão não é mais de propriedade do programa, o que significa que ela pode ser reatribuída para outro propósito ou alterada por outras partes do programa. Se o programa continuar a usar essa memória liberada, isso pode levar a um comportamento imprevisível, incluindo travamentos, corrupção de dados ou exploração por atacantes.
Alocação e Desalocação de Memória:
malloc() ou new) e a liberam quando terminam de usá-la (por exemplo, com free() ou delete).O Problema:
Consequências:
Considere um exemplo simplificado em 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;
}
No exemplo:
free(ptr).ptr ainda está sendo usado (desreferenciado na instrução printf()), o que leva a um comportamento indefinido. A memória pode ter sido reatribuída, e acessá-la pode levar a um travamento ou, em um cenário mais perigoso, à exploração do programa.Atacantes podem explorar vulnerabilidades de use-after-free manipulando cuidadosamente o gerenciamento de memória. Veja como um atacante poderia potencialmente usar essa vulnerabilidade:
Para prevenir vulnerabilidades de use-after-free, os desenvolvedores podem:
NULL após liberá-los: Isso garante que, se um ponteiro for usado acidentalmente após ser liberado, o programa trave de forma mais previsível ou se comporte de maneira controlada, em vez de acessar memória inválida.std::shared_ptr, std::unique_ptr) pode ajudar a gerenciar a memória automaticamente, reduzindo as chances de mau gerenciamento manual da memória.Neste caso específico, a Timeline de Animação CSS—que é responsável por controlar o tempo das animações em uma página web—estava interagindo com outros componentes do navegador de tal forma que um objeto vinculado à timeline da animação foi liberado, mas o navegador continuou a usá-lo.