
Технический разбор и PoC для CVE-2024-6769, объединяющие перехват DLL с отравлением кэша активации для повышения привилегий со среднего до высокого уровня целостности в системах Windows.
В этом блоге рассказывается о двух связанных ошибках: первая стадия — это DLL-хайекинг, вызванный переопределением ROOT-диска, а вторая стадия — это отравление кэша активации (Activation Cache Poisoning), управляемое сервером CSRSS.
Первая стадия была подробно представлена на Ekoparty 2023 в докладе под названием "I'm High" Николаса Экономо из BlueFrost Security. Он объяснил, как эксплуатировать уязвимость, которая на тот момент ещё не была исправлена Microsoft. Это позволяло пользователю с MEDIUM INTEGRITY повысить свои привилегии до ограниченных HIGH PRIVILEGES, но без полного доступа к функциям администратора.
Вторая стадия не была представлена на этой конференции, хотя были предложены некоторые шаги для начала её исследования.
Для начала мы рассмотрим первую стадию, чтобы дать вводный контекст. Затем мы углубимся в моё исследование второй стадии, детально разберём полное повышение с ограниченного HIGH INTEGRITY до полного администратора. Это включает полностью рабочее PoC для обеих стадий для всех версий Windows, успешно протестированное на Windows 10, Windows 11, Windows Server 2022 и Windows Server 2019 со всеми установленными обновлениями.

Единственное требование для этой стадии — чтобы начальный процесс имел MEDIUM INTEGRITY LEVEL, а пользователь принадлежал к группе Администраторов.
Первую стадию эксплуатации можно обобщить следующими шагами:
Например: переопределение диска с
"C:" на "C:\users\public"
Это также переопределит папку "system32" с
"C:\windows\system32" на "C:\users\public\windows\system32"
Одной из таких затронутых программ является CTFMON, которая работает на HIGH INTEGRITY LEVEL, но без прав Администратора.
Обычно она пытается загрузить модуль MsCtfMonitor.dll из реальной папки system32, но, так как ROOT-диск переопределён, она ищет MsCtfMonitor.dll в нашей фальшивой папке system32, где мы можем создать и разместить поддельную DLL с тем же именем.
На этом этапе, поместив нашу версию MsCtfMonitor.dll в фальшивую папку system32, будет вызвана её функция DoMsCtfMonitor, которая выполнит наш код с HIGH INTEGRITY LEVEL.




В то же время мы можем подтвердить, что процесс, несмотря на HIGH INTEGRITY LEVEL, не имеет прав Администратора:


В своём докладе на Ekoparty Николас предложил следующие шаги для завершения эксплуатации:


Хотя это выглядит просто, требуется много времени на реверс-инжиниринг и отладку.
При более глубоком изучении этой истории векторов атак стало ясно, что отравление кэша контекста активации (Activation Context Cache) использовалось в некоторых эксплойтах. Следовательно, стоит изучить, как ранее проводилась эксплуатация, чтобы получить дополнительный контекст и понимание. Подробности об этой эксплуатации доступны в отчёте Zero Day Initiative Activation Context Cache Poisoning: Exploiting CSRSS for Privilege Escalation.
Использование кэша активации происходит, когда программа собирается загрузить библиотеку, требующую определённой версии.
Например, если приложение собирается загрузить C:\Windows\System32\comctl32.dll, нет гарантии, что comctl32.dll в этом расположении — это та версия, которая нужна приложению. Это базовый пример использования кэша контекстов активации. Программа может отправить запрос серверу CSRSS для обработки новой записи контекста активации для внесения в кэш, чтобы программа могла загрузить нужную версию библиотеки.
Для этого используется так называемый манифест в формате XML. Обычно он встроен как ресурс в EXE или DLL-файл. Альтернативно, Windows ищет файл манифеста в той же папке, где находится исполняемый файл программы.
В упомянутом выше URL есть несколько примеров файлов манифеста, использовавшихся в старых эксплойтах, например, обман системы с целью загрузки библиотеки advapi32.dll из папки, контролируемой атакующим, с помощью техники PATH TRAVERSAL.

Конечно, некоторые использованные векторы атак были исправлены, а также обнаружены новые техники. Кроме того, в октябрьском обновлении 2022 года для Windows 11 22H2 была добавлена новая проверка.
После внедрения этого исправления проверка при регистрации Activation Context (ACTX) может быть обойдена только в том случае, если процесс, добавляющий новую запись в кэш, имеет тот же или более высокий RID, чем процесс, который будет её использовать.
В winnt.h можно увидеть значения RID:

Предложение для обхода этой проверки — создать запрос с Activation Context из процесса CTFMON, где выполняется поддельная DLL. Эта поддельная DLL имеет RID=0x3000, и после добавления записи в кэш процесс TCMSETUP с RID=0x3000 загрузит tapi32.dll.