
Уязвимость BDU:2024-06408 (CVE-2024-38144) WOW Thunk Windows
Уязвимость BDU:2024-06408 (CVE-2024-38144) в драйвере WOW Thunk службы потоковой передачи ядра Windows (WOW64) связана с переполнением буфера в динамической памяти при обработке специально сформированных запросов через интерфейс аудиодрайвера. Злоумышленник, имеющий первоначальный доступ к системе с низкими привилегиями (обычный пользователь), может отправить зловредный IOCTL-запрос, вызывающий переполнение буфера в драйвере, работающем в режиме ядра (Ring 0). Это позволяет ему выполнить произвольный код с повышенными привилегиями (SYSTEM или администратора).
Анализ уязвимости
Уровень опасности: 8.8 HIGH
Вектор атаки: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
-
AV:N (Attack Vector - Network): Атака возможна через сеть (уязвимый компонент доступен через сетевой стек).
-
AC:L (Attack Complexity - Low): Низкая сложность эксплуатации, не требуются специальные условия.
-
PR:L (Privileges Required - Low): Требуются привилегии обычного пользователя.
-
UI:N (User Interaction - None): Вмешательство пользователя не требуется.
-
S:U (Scope - Unchanged): Успешная атака не затрагивает другие компоненты.
-
C:H (Confidentiality Impact - High): Полное раскрытие конфиденциальной информации (файлы, память ядра).
-
I:H (Integrity Impact - High): Полное нарушение целостности (изменение любых файлов, настроек).
-
A:H (Availability Impact - High): Полный отказ в обслуживании (крах системы).
Условия эксплуатации
-
Доступ к системе: Злоумышленник должен иметь возможность выполнить код на целевой системе с правами обычного пользователя (например, через фишинг, уязвимое ПО, RDP-сессию).
-
Уязвимая ОС: Система должна использовать уязвимую версию Windows (10/11/Server), без патча от июня 2024 года.
-
Сетевая доступность (косвенная): Хотя вектор
AV:N
указывает на возможность эксплуатации через сеть, для запуска самого эксплоита обычно требуется локальное выполнение кода. Сетевой аспект заключается в доступности интерфейса драйвера (TEE_INTERFACE
) через сетевой стек ОС для локальных процессов. Прямая эксплуатация "из интернета" без предварительного доступа маловероятна.
Уязвимые версии ОС
- Windows 10 1607 32-bit
- Windows 10 1607 64-bit
- Windows 10 1809 32-bit
- Windows 10 1809 64-bit
- Windows 10 1809 ARM64
- Windows 10 21H2 32-bit
- Windows 10 21H2 64-bit
- Windows 10 21H2 ARM64
- Windows 10 22H2 32-bit
- Windows 10 22H2 64-bit
- Windows 10 22H2 ARM64
- Windows 10 32-bit
- Windows 10 64-bit
- Windows 11 21H2 64-bit
- Windows 11 21H2 ARM64
- Windows 11 22H2 64-bit
- Windows 11 22H2 ARM64
- Windows 11 23H2 64-bit
- Windows 11 23H2 ARM64
- Windows 11 24H2 64-bit
- Windows 11 24H2 ARM64
- Windows Server 2008 R2 SP1 64-bit
- Windows Server 2008 R2 SP1 Server Core installation 64-bit
- Windows Server 2008 SP2 32-bit
- Windows Server 2008 SP2 64-bit
- Windows Server 2008 SP2 Server Core installation 32-bit
- Windows Server 2008 SP2 Server Core installation 64-bit
- Windows Server 2012
- Windows Server 2012 R2
- Windows Server 2012 R2 Server Core installation
- Windows Server 2012 Server Core installation
- Windows Server 2016
- Windows Server 2016 Server Core installation
- Windows Server 2019
- Windows Server 2019 Server Core installation
- Windows Server 2022
- Windows Server 2022 23H2 Edition Server Core installation
- Windows Server 2022 Server Core installation
Анализ кода эксплоита
Рассмотрим ключевые части эксплоита (CVE-2024-38144.c) для понимания работы вектора атаки с использованием этой уязвимости:
-
Целевой интерфейс:
#define TEE_INTERFACE L"\\\\?\\root#system#0000#{cf1dda2c-9743-11d0-a3ee-00a0c9223196}\\{cfd669f1-9bc2-11d0-8299-0000f822fe8a}&{cf1dda2c-9743-11d0-a3ee-00a0c9223196}"
Эксплоит нацелен на конкретный экземпляр аудиоустройства, доступный через интерфейс Windows Kernel Streaming (
KS
), идентифицируемый по GUID. Этот интерфейс связан с функциональностью аудиообработки. -
Создание подключения (Pin) к аудиодрайверу:
HANDLE CreateKsPin(HANDLE hDevice, ULONG pinId) { KSPIN_CONNECT ksPinConnect = {0}; ... // Настройка интерфейса, среды, идентификатора пина KSDATAFORMAT ksDataFormat = {0}; ... // Настройка формата данных (здесь - аудио PCM) ULONG connSize = sizeof(KSPIN_CONNECT) + sizeof(KSDATAFORMAT); PKSPIN_CONNECT ksPinConn = (PKSPIN_CONNECT)malloc(connSize); memcpy(ksPinConn, &ksPinConnect, sizeof(KSPIN_CONNECT)); memcpy(ksPinConn + 1, &ksDataFormat, sizeof(KSDATAFORMAT)); // Копирование формата данных *после* структуры подключения HANDLE pinHandle = NULL; DWORD status = KsCreatePin(hDevice, ksPinConn, GENERIC_READ, &pinHandle); // Создание пина ... return pinHandle; }
Функция
CreateKsPin
открывает "пин" (точку подключения) на аудиоустройстве. Это стандартная процедура для взаимодействия с драйверами KS. -
Отправка зловредного IOCTL-запроса:
#define MALFORMED_OUTPUTBUFFERLENGTH 0xFFFFFFF1 BOOL SendIoctlKsEnableEvent(HANDLE pinHandle) { KSEVENT ksevent = {0}; ... // Настройка события (KSEVENT_CONNECTION_ENDOFSTREAM) KSEVENTDATA eventData = {0}; eventData.NotificationType = KSEVENTF_EVENT_HANDLE; eventData.EventHandle.Event = CreateEvent(NULL, FALSE, FALSE, NULL); // Создание события Win32 DWORD bytesReturned = 0; BOOL result = DeviceIoControl( pinHandle, IOCTL_KS_ENABLE_EVENT, // Код уязвимого IOCTL &ksevent, // Входной буфер (корректный) sizeof(ksevent), // Размер входного буфера (корректный) &eventData, // Выходной буфер (мал - только KSEVENTDATA) MALFORMED_OUTPUTBUFFERLENGTH, // 0xFFFFFFF1 - ЗЛОВРЕДНО БОЛЬШОЙ размер выходного буфера! &bytesReturned, NULL ); ... return TRUE; }
Сердце эксплоита и уязвимости: Отправляется запрос
IOCTL_KS_ENABLE_EVENT
для включения события окончания потока. Ключевая аномалия - параметрnOutBufferSize
установлен в гигантское значение0xFFFFFFF1
(4,294,967,281 байт). Это значение значительно превышает реальный размер структурыKSEVENTDATA
(примерно 32-40 байт в зависимости от выравнивания), передаваемой вlpOutBuffer
. -
Механизм уязвимости в драйвере:
-
Драйвер, обрабатывая
IOCTL_KS_ENABLE_EVENT
, получает указатель на выходной буфер (&eventData
) и некорректно доверяет переданному размеру этого буфера (MALFORMED_OUTPUTBUFFERLENGTH
). -
Вместо проверки, что размер буфера достаточен для данных, которые драйвер собирается в него записать (размер
KSEVENTDATA
), драйвер использует переданный огромный размер. -
Драйвер пытается записать в выходной буфер данные, связанные с событием. Так как переданный размер буфера (
0xFFFFFFF1
) больше его реального размера (размерKSEVENTDATA eventData
), возникает переполнение буфера. -
Переполнение происходит в динамической памяти, выделенной под обработку этого IOCTL-запроса.
-
Умело контролируя содержимое памяти, которую перезаписывает это переполнение (например, структуры объектов ядра, указатели функций), злоумышленник может перенаправить поток выполнения драйвера на свой собственный шелл-код, размещенный в памяти пользовательского режима (но подготовленный особым образом) или в памяти ядра.
-
Что может получить злоумышленник?
-
Повышение привилегий: Основная цель. Код обычного пользователя получает права уровня SYSTEM или администратора.
-
Полный контроль над системой: Установка руткитов, постоянных бэкдоров, кража любых данных (пароли, ключи шифрования, файлы), изменение системных настроек, отключение безопасности.
-
Устойчивость: Маскировка присутствия, перехват системных вызовов.
-
Дальнейшее продвижение: Использование скомпрометированной системы как плацдарма для атак на другие системы в сети.
-
Отказ в обслуживании (DoS): При неудачной попытке эксплуатации или целенаправленно можно вызвать крах системы (BSOD).
Способы защиты
-
Приоритет 1: Установка обновлений безопасности:
-
Установите обновления безопасности от июня 2024 года.
-
Автоматическое обновление: Включите и регулярно проверяйте работу службы Windows Update.
-
-
Принцип минимальных привилегий:
-
Ограничьте количество пользователей с правами локального администратора.
-
Используйте стандартные учетные записи пользователей для повседневных задач. Эксплуатация требует выполнения кода от имени пользователя, но не требует его прав администратора.
-
-
Защита от выполнения кода:
-
ASLR (Address Space Layout Randomization): Убедитесь, что ASLR включен глобально (современные Windows включены по умолчанию). Усложняет использование ROP-цепей.
-
DEP (Data Execution Prevention): Должна быть включена всегда. Предотвращает выполнение кода из областей данных.
-
Контроль целостности ядра (Kernel Patch Protection - PatchGuard): Защищает структуры ядра от модификации (актуально для руткитов после эксплуатации). Включена по умолчанию в поддерживаемых версиях (x64).
-
Microsoft Defender Exploit Guard (EMET-наследник): Используйте функцию "Protection from elevation" (Предотвращение повышения прав) в Attack Surface Reduction (ASR) rules. Может блокировать попытки эксплуатации.
-
Endpoint Detection and Response (EDR/XDR): Решения могут детектировать аномальное поведение процессов, попытки выполнения кода в памяти ядра или использование уязвимых путей драйверов.
-
Потенциальное правило для Host IPS / EDR (Концептуальное)
Системы безопасности, работающие на конечном узле (Host IPS, EDR), теоретически могли бы детектировать или блокировать попытку эксплуатации, отслеживая вызовы DeviceIoControl
:
# Концептуальное правило YARA/Sigma/EDR-query для детекта на атакуемого хосте rule CVE_2024_38144_Exploit_Attempt { meta: description = "Detects potential exploit attempt for CVE-2024-38144 (WOW Thunk Buffer Overflow)" severity = "critical" cve = "CVE-2024-38144" conditions: # 1. Целевой интерфейс (часть пути или GUID) (device_path contains "root#system#0000#{cf1dda2c-9743-11d0-a3ee-00a0c9223196}" or device_guid == "{cfd669f1-9bc2-11d0-8299-0000f822fe8a}") and # 2. Вызов DeviceIoControl с IOCTL, характерным для KS (или конкретно IOCTL_KS_ENABLE_EVENT) syscall == "DeviceIoControl" and (ioctl_code == 0x1234567 /* Примерное значение IOCTL_KS_ENABLE_EVENT, должно быть уточнено */) and # 3. Подозрительно огромный размер выходного буфера (близкий к 0xFFFFFFF1) out_buffer_size >= 0xFFFFFFF0 }
Важно: Это концептуальное правило. Реализация зависит от возможностей конкретного EDR/HIPS. Точный код IOCTL IOCTL_KS_ENABLE_EVENT
необходимо уточнять для конкретного драйвера/версии. Злоумышленник может обфусцировать код или изменить размер буфера.
Вывод:
BDU:2024-06408 (CVE-2024-38144) представляет собой опасную уязвимость локального повышения привилегий в ядре Windows, затрагивающую широкий спектр версий. Эксплуатация через специальный IOCTL-запрос с некорректным размером буфера позволяет получить полный контроль над системой. Крайне важно немедленно установить обновления безопасности от июня 2024 года. Дополнительные меры (минимизация прав, EDR) повышают общую устойчивость инфраструктуры к подобным атакам. Сетевые средства защиты (WAF/IPS) неэффективны против данной вектора из-за его локальной природы и работы на уровне драйвера ядра.
