Уязвимость в K7 Ultimate Security
Уязвимость в K7 Ultimate Security
Категория: Программы Теги: Уязвимости Опубликовано: 23 сентября 2025

Уязвимость CVE-2024-36424 в K7 Ultimate Security

Уязвимость CVE-2024-36424 представляет собой опасную ошибку в драйвере K7RKScan.sys, входящем в состав K7 Ultimate Security. Эта уязвимость позволяет локальному пользователю с низкими привилегиями вызвать отказ в обслуживании (DoS) системы, что приводит к синему экрану смерти (BSOD). Проблема возникает из-за отсутствия должной проверки указателей в обработчике IOCTL-запросов драйвера.

Анализ уязвимости

Уровень опасности: 5.5 (MEDIUM).
Вектор атаки: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H. 

  • AV:L (Attack Vector: Local) - для атаки требуется локальный доступ к системе.

  • AC:L (Attack Complexity: Low) - низкая сложность эксплуатации, не требующая специальных условий.

  • PR:L (Privileges Required: Low) - достаточно низкого уровня привилегий (обычный пользователь).

  • UI:N (User Interaction: None) - атака не требует взаимодействия с пользователем.

  • S:U (Scope: Unchanged) - воздействие ограничено компонентом уязвимости (драйвером).

  • C:N (Confidentiality Impact: None) - нет воздействия на конфиденциальность.

  • I:N (Integrity Impact: None) - нет воздействия на целостность.

  • A:H (Availability Impact: High) - высокое воздействие на доступность системы.

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

Для успешной эксплуатации уязвимости злоумышленник должен обладать доступом к целевой системе с правами обычного пользователя. Критическим условием является наличие уязвимой версии программного обеспечения (K7 Ultimate Security версии ниже 17.0.2019). Драйвер K7RKScan.sys должен быть загружен в систему. Атака является локальной, что подразумевает наличие у атакующего возможности выполнить код в контексте целевой системы.

Технический анализ уязвимости

Суть проблемы

Уязвимость относится к классу CWE-476 (NULL Pointer Dereference) - обращение к нулевому указателю. Ядро Windows пытается обратиться к памяти по адресу 0x00000000, который является недопустимым, что приводит к критическому исключению и аварийному завершению работы системы с синим экраном (BSOD).

Ошибка кроется в функции драйвера, обрабатывающей IOCTL (Input/Output Control) коды 0x222010 и 0x222014. Перед выполнением операций драйвер не проверяет валидность переданного ему буфера данных, предполагая, что он всегда содержит корректный адрес. При передаче нулевого указателя (NULL) происходит попытка чтения из нулевого адреса памяти.

Анализ кода эксплоита

Рассмотрим код эксплоита для понимания работы вектора атаки с использованием этой уязвимости. Анализ позволяет увидеть, как просто эксплуатация сочетается с мощным воздействием.

const std::wstring driverDevice = L"\\\\.\\DosK7RKScnDrv";
const DWORD ioCTL = 0x222010;

Первым шагом эксплоит определяет символическую ссылку на устройство драйвера (\\\\.\\DosK7RKScnDrv) и конкретный IOCTL-код, вызывающий ошибку. Символическая ссылка — это интерфейс, через который пользовательские программы взаимодействуют с драйвером. Важно отметить, что по умолчанию это устройство доступно для записи всем пользователям системы, что является дополнительной ошибкой конфигурации.

HANDLE hDevice = CreateFile(driverDevice.c_str(),
    GENERIC_READ | GENERIC_WRITE,
    0,
    nullptr,
    OPEN_EXISTING,
    0,
    nullptr);

Функция CreateFile используется не для создания файла, а для открытия handle (дескриптора) к устройству драйвера. Параметры GENERIC_READ | GENERIC_WRITE запрашивают права на чтение и запись. Ключевой момент — параметр 0 для dwShareMode, который означает, что устройство открывается с эксклюзивным доступом. Однако, если драйвер уже кем-то используется, эта операция может завершиться ошибкой.

void* inputBuffer = nullptr;
DWORD inputBufferSize = 0;

DWORD bytesReturned;
BOOL result = DeviceIoControl(hDevice,
    ioCTL,
    inputBuffer,
    inputBufferSize,
    nullptr,
    0,
    &bytesReturned,
    nullptr);

Это ядро эксплоита. Функция DeviceIoControl отправляет драйверу управляющий код (ioCTL). Критический параметр — inputBuffer, который явно установлен в nullptr. Размер буфера (inputBufferSize) равен нулю. Драйвер, получая такой запрос, не проверяет валидность буфера перед его использованием и пытается прочитать данные по нулевому адресу, что вызывает исключение на уровне ядра.

Метод защиты

Основной метод — обновление

K7 Computing выпустили обновление, устраняющее уязвимость. Необходимо обновить K7 Ultimate Security до версии 17.0.2019 или выше. Рекомендуется настроить автоматическое обновление антивирусных баз и компонентов программы.

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