Уязвимость драйвера службы потоковой передачи ядра WOW Thunk операционных систем Windows
Уязвимость драйвера службы потоковой передачи ядра WOW Thunk операционных систем Windows
Категория: Программы Теги: Уязвимости Опубликовано: 9 июня 2025

Уязвимость 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): Полный отказ в обслуживании (крах системы).

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

  1. Доступ к системе: Злоумышленник должен иметь возможность выполнить код на целевой системе с правами обычного пользователя (например, через фишинг, уязвимое ПО, RDP-сессию).

  2. Уязвимая ОС: Система должна использовать уязвимую версию Windows (10/11/Server), без патча от июня 2024 года.

  3. Сетевая доступность (косвенная): Хотя вектор 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) для понимания работы вектора атаки с использованием этой уязвимости:

  1. Целевой интерфейс:

    #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. Этот интерфейс связан с функциональностью аудиообработки.

  2. Создание подключения (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.

  3. Отправка зловредного 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.

  4. Механизм уязвимости в драйвере:

    • Драйвер, обрабатывая IOCTL_KS_ENABLE_EVENT, получает указатель на выходной буфер (&eventData) и некорректно доверяет переданному размеру этого буфера (MALFORMED_OUTPUTBUFFERLENGTH).

    • Вместо проверки, что размер буфера достаточен для данных, которые драйвер собирается в него записать (размер KSEVENTDATA), драйвер использует переданный огромный размер.

    • Драйвер пытается записать в выходной буфер данные, связанные с событием. Так как переданный размер буфера (0xFFFFFFF1) больше его реального размера (размер KSEVENTDATA eventData), возникает переполнение буфера.

    • Переполнение происходит в динамической памяти, выделенной под обработку этого IOCTL-запроса.

    • Умело контролируя содержимое памяти, которую перезаписывает это переполнение (например, структуры объектов ядра, указатели функций), злоумышленник может перенаправить поток выполнения драйвера на свой собственный шелл-код, размещенный в памяти пользовательского режима (но подготовленный особым образом) или в памяти ядра.

Что может получить злоумышленник?

  • Повышение привилегий: Основная цель. Код обычного пользователя получает права уровня SYSTEM или администратора.

  • Полный контроль над системой: Установка руткитов, постоянных бэкдоров, кража любых данных (пароли, ключи шифрования, файлы), изменение системных настроек, отключение безопасности.

  • Устойчивость: Маскировка присутствия, перехват системных вызовов.

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

  • Отказ в обслуживании (DoS): При неудачной попытке эксплуатации или целенаправленно можно вызвать крах системы (BSOD).

Способы защиты

  1. Приоритет 1: Установка обновлений безопасности:

    • Установите обновления безопасности от июня 2024 года.

    • Автоматическое обновление: Включите и регулярно проверяйте работу службы Windows Update.

  2. Принцип минимальных привилегий:

    • Ограничьте количество пользователей с правами локального администратора.

    • Используйте стандартные учетные записи пользователей для повседневных задач. Эксплуатация требует выполнения кода от имени пользователя, но не требует его прав администратора.

  3. Защита от выполнения кода:

    • 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) неэффективны против данной вектора из-за его локальной природы и работы на уровне драйвера ядра.

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