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

Уязвимость BDU:2020-00220 (CVE-2020-0642) Windows

Уязвимость BDU:2020-00220 (CVE-2020-0642) представляет собой критическую ошибку в компоненте Win32k операционной системы Windows. Она связана с некорректной обработкой объектов в памяти ядром системы, что позволяет злоумышленнику повысить привилегии до уровня ядра (NT AUTHORITY\SYSTEM) через специально сконструированное приложение. Для эксплуатации атакующему требуется локальный доступ к системе и возможность выполнения кода с ограниченными правами.

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

Уровень опасности: 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. Целевые ОС: Windows 7–10 (включая Server-версии) до обновлений января 2020 г.

  2. Доступ: Локальная авторизация под учетной записью без привилегий администратора.

  3. Сценарии:

    • Компрометация через вредоносное ПО (например, троянец, загруженный пользователем).

    • Атака на рабочие станции в корпоративной сети через RDP-сессии с ограниченными правами.

Уязвимые операционные системы

  • Windows 10: Версии 1607, 1709, 1803, 1809, 1903, 1909 (32-bit, 64-bit, ARM64)
  • Windows 7: SP1 (32-bit, 64-bit)
  • Windows 8.1: Все редакции (32-bit, 64-bit, RT ARM)
  • Windows Server Core-установки: 1803, 1903, 1909
  • Windows Server 2008: SP2 (32-bit, 64-bit, Itanium), Server Core
  • Windows Server 2008 R2: SP1 (64-bit, Itanium), Server Core
  • Windows Server 2012/R2: Все редакции (включая Server Core)
  • Windows Server 2016/2019: Все редакции (включая Server Core)

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

Уязвимость возникает в драйвере win32k.sys, отвечающем за обработку графических операций и объектов пользовательского режима. Ошибка заключается в некорректной валидации указателей при работе с callback-функциями (см. структуру KernelCallbackTable в PEB). При уничтожении оконных объектов драйвер не проверяет состояние связанных структур в памяти, что приводит к use-after-free (UAF).


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

Рассмотрим код эксплоита для понимания работы вектора атаки с использованием уязвимости CVE-2020-0642.

Эксплоит (на C++) использует подмену callback-функций в таблице KernelCallbackTable процесса:

// 1. Перехват callback-функций
PTEB teb = NtCurrentTeb();
PPEB peb = teb->ProcessEnvironmentBlock;
PVOID pCCI2 = &((PVOID*)peb->KernelCallbackTable)[2]; // Индекс 2: WM_CREATE
OrgCCI2 = (PFNUSER32CALLBACK)InterlockedExchangePointer((PVOID*)pCCI2, &NewCCI2);

// 2. Создание окон-триггеров
HWND hParent = CreateWindow(L"ScrollBar", L"Parent", WS_OVERLAPPEDWINDOW, ...);
HWND hChild = CreateWindow(L"ScrollBar", L"Child", WS_VISIBLE, ...);

// 3. Активация UAF
Flag1 = TRUE;
SendMessage(hChild, WM_LBUTTONDOWN, 0, 0); // Инициирует цепочку уничтожения окон

Пошаговое выполнение:

  1. Подготовка:

    • Эксплоит заменяет оригинальные callback-функции (индексы 2 и 3 в KernelCallbackTable) на свои обработчики NewCCI2 и NewCCI3.

  2. Создание окон:

    • hParent и hChild создаются как объекты класса ScrollBar.

  3. Триггер уязвимости:

    • При отправке WM_LBUTTONDOWN дочернему окну система начинает уничтожать родительское окно (DestroyWindow(hParent)), но из-за флага Flag2 выполнение прерывается в NewCCI3, оставляя объекты в неконсистентном состоянии.

  4. Эскалация привилегий:

    • Манипуляция с освобожденной памятью позволяет перезаписать структуры ядра и выполнить произвольный код с правами SYSTEM.


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

  • Полный контроль над системой: Установка руткитов, скрытый запуск процессов.

  • Кража данных: Доступ к зашифрованным файлам, паролям LSASS, токенам аутентификации.

  • Перемещение в сети: Компрометация доменных контроллеров через передачу хэшей NTLM.

  • Создание бэкдоров: Регистрация вредоносных служб или задач планировщика.


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

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

    • Патч Microsoft (январь 2020 г.).

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

    • Ограничение прав пользователей через GPO: запрет запуска неподписанных приложений.

  3. Endpoint Detection and Response (EDR):

    • Правила для детектирования подозрительных операций с win32k.sys:

      # Пример правила для Elastic EDR
      process.where(args : "CreateWindow" and subtype : "ScrollBar") 
      AND registry.modified : "HKLM\SYSTEM\CurrentControlSet\Services\Win32k"
  4. Блокировка на уровне хоста:

    • Для локальных уязвимостей IPS неэффективны. Используйте:

      • Device Guard: Блокировка неподписанных двоичных файлов.

      • Attack Surface Reduction (ASR): Правило "Блокировка создания дочерних процессов" (D4F940AB-401B-4EFC-AADC-AD5F3C50688A).


Заключение

BDU:2020-00220 (CVE-2020-0642) демонстрирует классический сценарий UAF в ядре Windows. Ключевая мера защиты — своевременное обновление систем. Для legacy-сред рекомендуется строгий контроль целостности ПО и сегментация сети для ограничения перемещения атакующего.

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