Уязвимость компонента Windows Kernel
Уязвимость компонента Windows Kernel
Категория: Программы Теги: Уязвимости Опубликовано: 19 сентября 2025

Уязвимость 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 (Влияние на доступность): Высокое - возможно полное нарушение доступности системы.

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

Для успешной эксплуатации уязвимости злоумышленник должен иметь:

  1. Локальный доступ к системе с возможностью выполнения кода.

  2. Учетную запись с низкими привилегиями (обычного пользователя).

  3. Одну из уязвимых версий ОС Windows (Windows 10 21H2-22H2, Windows 11 24H2, Windows Server 2022-2025).

  4. Отсутствие обновлений безопасности от ноября 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);

Ключевые моменты эксплойта:

  1. Создаются два файла, причем целевой файл открывается в синхронном режиме (FILE_SYNCHRONICAL_IO_NONALERT), что активирует уязвимый путь кода.

  2. Параметр DestOffset устанавливается в 1, что важно для управления значением счетчика ссылок.

  3. В качестве handle события передается значение 1 (неверный handle), что приводит к ошибке и переходу к очистке ресурсов.

  4. При очистке происходит вызов ObfDereferenceObject с указателем на стековое событие.

В результате выполняется операция декремента для значения, расположенного по адресу [StackEvent-0x30]. В структуре стека функции NtCopyFileChunk это соответствует позиции параметра DestOffset, значение которого контролируется пользователем.

Ограничения эксплуатации

Хотя уязвимость существует, ее практическая эксплуатация затруднена из-за нескольких факторов:

  1. После операции декремента происходит проверка значения счетчика handles (HandleCount), которое должно быть нулевым.

  2. Для успешной эксплуатации необходимо обойти дополнительные проверки и контролировать структуру стека.

  3. В текущей реализации эксплойт вызывает лишь крах системы (BSOD), а не повышение привилегий.

Возможные последствия успешной эксплуатации

В случае успешной эксплуатации уязвимости злоумышленник может:

  1. Повысить свои привилегии до уровня SYSTEM.

  2. Обойти механизмы безопасности и системы контроля целостности.

  3. Получить полный контроль над системой с возможностью выполнения произвольного кода.

  4. Устанавливать и запускать вредоносные программы с повышенними привилегиями.

  5. Получить доступ к конфиденциальным данным, включая учетные данные других пользователей.

Методы защиты

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], что в сочетании с другими защитными механизмами значительно повышает общий уровень безопасности системы.

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