
Уязвимость 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)
Условия эксплуатации
-
Целевые приложения:
-
Firefox < 131.0.2
-
Firefox ESR < 128.3.1 и < 115.16.1
-
Thunderbird < 131.0.1, < 128.3.1, < 115.16.0
-
-
Вектор: Удалённая атака через посещение вредоносной веб-страницы.
-
Требования: Отключенные механизмы изоляции процессов (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.
-
Инициализация уязвимости:
Создаётся элемент с CSS-анимацией, привязанной к временной шкале.<div id="target" class="exploit-animation"></div> <style> @keyframes malicious { ... } .exploit-animation { animation: malicious 2s infinite; } </style>
-
Триггер UaF:
Быстрое добавление/удаление анимации через JavaScript вызывает ошибку в управлении жизненным циклом объектаAnimationTimeline
.function trigger() { const target = document.getElementById("target"); setInterval(() => { target.classList.toggle("exploit-animation"); // Rapid toggling }, 1); // Минимальная задержка } trigger();
-
Перезапись памяти:
После освобождения памяти подAnimationTimeline
, атакующий заполняет её контролируемыми данными черезArrayBuffer
:const spray = new ArrayBuffer(0x100); const view = new Uint32Array(spray); for (let i = 0; i < view.length; i++) view[i] = 0x41414141; // "AAAA"
-
Выполнение кода:
Когда браузер обращается к освобождённому объекту, он исполняет перезаписанные данные как код (ROP-цепочка или shellcode).
Защитные меры
-
Обновление ПО:
# Для Linux (Debian/Ubuntu) sudo apt update && sudo apt upgrade firefox firefox-esr
-
Hardening браузера:
-
Активировать
security.sandbox.content.level
вabout:config
(значение 4+). -
Включить изоляцию сайтов (
fission.autostart
=true
).
-
-
Правила для 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; \ )
Ограничение: Правило эффективно только против примитивных эксплойтов.
-
Аддон NoScript: Блокировка недоверенных скриптов.
