Векторы тестирования на проникновение, связанные с уязвимостями в операционных системах и программном обеспечении, всегда привлекали особое внимание. Какие новые и интересные уязвимости можно добавить в нашу коллекцию? В этой статье мы исследуем три уязвимости в ОС 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 (доказательство концепции) был предоставлен вместе с исходным кодом, который содержит интересные комментарии. Ниже представлен высокоуровневый алгоритм эксплойта, основываясь на данном исходном коде.
mainфункция почти весь код содержит в цикле, условием которого является успешное чтение ключа реестраSYSTEM\\CurrentControlSet\\Services\\Fax\\ImagePath. Причем поиск осуществляется следующего значения —%systemroot%\\Temp\\asmae.exe- На строке 76 и 77 внутри цикла устанавливается приоритет процесса и потока эксплойта.
SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS); SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);Это может указывать на то, что эксплойт использует проблему типа Race Condition.
- Подтверждение пункту 2 можно привести так же использование вот такого цикла для загрузки процессора:
DWORD WINAPI thread(void* args) { do { } while (1); } - Основная эксплуатация происходит параллельно следующей команде:
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, которая часто используется для повышения привилегий. Эта уязвимость связана с проблемами, возникающими при создании и уничтожении объектов в подсистеме. Особенно чувствительными к этим проблемам являются элементы пользовательского интерфейса, которые создаются с использованием случайных значений параметров инициализации.
В репозитории эксплойтов был найден публичный эксплойт для этой уязвимости.
Чтобы повысить привилегии пользователя, эксплойт выполняет следующие шаги:
- Создание и инициализация фэйковых объектов подсистемы Win32k
- Использование уязвимости или стандартного механизма ОС для получения маппинга оперативной памяти ядра ОС
- Поиск primary Token в памяти запущенного процесса
- Модификация привилегий напрямую или с использованием донорского процесса, как правило это процесс 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. Эти загрузки происходят без достаточной валидации, что делает возможным внедрение зловредного кода.