Список уязвимостей для ОС Windows

Векторы тестирования на проникновение, связанные с уязвимостями в операционных системах и программном обеспечении, всегда привлекали особое внимание. Какие новые и интересные уязвимости можно добавить в нашу коллекцию? В этой статье мы исследуем три уязвимости в ОС Windows и MS Office, которые были обнародованы за последние полгода.

Список уязвимостей

С каждым годом количество эксплойтов, публикуемых в открытый доступ, растет, несмотря на улучшения в процессах разработки программного обеспечения и реализацию дополнительных систем защиты.

Первый шаг — определить набор программного обеспечения, которое нас интересует. Учитывая, что тестирование на проникновение обычно проводится для корпоративных сетей, где широко используется ОС Windows, логично будет включить в список уязвимости для этой операционной системы и ее компонентов. Таким образом, в нашем списке следующее программное обеспечение:

  • Windows 7,8,10
  • Windows Server 2016, 2019
  • Exchange Server
  • Sharepoint Server
  • Пакет приложений MS Office
  • Atlassian Confluence
  • Atlassian Jira
  • git
  • WordPress
  • …

Быстрый поиск через любую поисковую машину находит несколько тысяч уязвимостей, которые были выпущены в public для перечисленных продуктов. Определим небольшой список:

  • CVE-2021-1727 (Windows)
  • CVE-2021-1732 (Windows)
  • CVE-2021-40444 (Office)

CVE-2021-1727

Обнаружена уязвимость в сервисе Windows Installer операционной системы Windows. Эта уязвимость позволяет злоумышленнику повысить свои привилегии до уровня пользователя System, что приводит к полной компрометации операционной системы. На данный момент специфика уязвимости не раскрыта. Windows 7, 8 и 10 (включая версию 2004) относятся к уязвимым системам.

Для поиска информации о данной уязвимости был использован репозиторий эксплойтов, и там был найден эксплойт, написанный на языке C++. Повезло, что этот PoC (доказательство концепции) был предоставлен вместе с исходным кодом, который содержит интересные комментарии. Ниже представлен высокоуровневый алгоритм эксплойта, основываясь на данном исходном коде.

  1. main функция почти весь код содержит в цикле, условием которого является успешное чтение ключа реестра SYSTEM\\CurrentControlSet\\Services\\Fax\\ImagePath. Причем поиск осуществляется следующего значения — %systemroot%\\Temp\\asmae.exe
  2. На строке 76 и 77 внутри цикла устанавливается приоритет процесса и потока эксплойта.
         SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
         SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);

    Это может указывать на то, что эксплойт использует проблему типа Race Condition.

  3. Подтверждение пункту 2 можно привести так же использование вот такого цикла для загрузки процессора:
    DWORD WINAPI thread(void* args) {
     do {
    
     } while (1);
    }
  4. Основная эксплуатация происходит параллельно следующей команде:
    c:\\windows\\system32\\msiexec.exe", L" /fa C:\\Windows\\Temp\\asmae.msi /quiet

Таким образом, перед нами эксплойт, который приводит к Race Condition и, используя эту уязвимость, перезатирает исполняемый файл для сервиса внутри Windows. В данном случае используется сервис «Fax».

В репозитории уже есть 2 файла, которые используются для запуска полезной нагрузки: asmae.msi и asmae.exe.

CVE-2021-1732

Обнаружена уязвимость в подсистеме Windows Win32k, которая часто используется для повышения привилегий. Эта уязвимость связана с проблемами, возникающими при создании и уничтожении объектов в подсистеме. Особенно чувствительными к этим проблемам являются элементы пользовательского интерфейса, которые создаются с использованием случайных значений параметров инициализации.

В репозитории эксплойтов был найден публичный эксплойт для этой уязвимости.

Чтобы повысить привилегии пользователя, эксплойт выполняет следующие шаги:

  1. Создание и инициализация фэйковых объектов подсистемы Win32k
  2. Использование уязвимости или стандартного механизма ОС для получения маппинга оперативной памяти ядра ОС
  3. Поиск primary Token в памяти запущенного процесса
  4. Модификация привилегий напрямую или с использованием донорского процесса, как правило это процесс System.exe

Эксплойт с самого начала использует механизм поиска базовых адресов в оперативной памяти. Для этого используется функция HmValidateHandle. На основании данных от этой функции собирается примитив для чтения памяти:

QWORD    MyRead64(QWORD qwDestAddr)
{
    MENUBARINFO pmbi = {};
    pmbi.cbSize = sizeof(MENUBARINFO);
    if (g_bIsInit)
    {

    }
    else
    {
        QWORD *pTemp = (QWORD*)LocalAlloc(0x40u, 0x200ui64);
        memset(pTemp, 0, 0x200);
        QWORD qwBase = 0x000000400000000;
        QWORD qwAdd = 0x0000000800000008;
        for (int i = 0; i < 0x40; i++)
        {
            *(pTemp + i) = qwBase + qwAdd*i;
        }
        *(QWORD *)ref_g_pMem5 = (QWORD)pTemp;
        GetMenuBarInfo(g_hWndMax, -3, 1, &pmbi);
        g_pmbi_rcBar_left = pmbi.rcBar.left;
        bool    g_bIsInit = 1;
    }

    *(QWORD *)ref_g_pMem5 = qwDestAddr - g_pmbi_rcBar_left;
    GetMenuBarInfo(g_hWndMax, -3, 1, &pmbi);
    return     (unsigned int)pmbi.rcBar.left + ((__int64)pmbi.rcBar.top << 32);
}

В качестве примитива на запись используется функция SetWindowLongPtrA. Далее перезатирается токен для выполнения команд с повышенными привелегиями.

CVE-2021-40444

Обнаружена уязвимость в модуле mshtml, который используется в операционной системе Windows для обработки разметки. Эта уязвимость особенно опасна при совместном использовании с MS Office, поскольку уязвимости в программном обеспечении Office позволяют злоумышленникам внедрять вредоносный код через mshtml.

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