
Эксплойт Windows для локального повышения привилегий (LPE) через CVE-2021-40449 — use-after-free в win32kfull!GreResetDCInternal, использующий утечку токенов, эксплуатацию гаджетов ядра и внедрение шеллкода для получения привилегий SYSTEM.
Мой эксплойт для CVE-2021-40449, Windows LPE через UAF в win32kfull!GreResetDCInternal.
Наряду с уязвимостью UAF используются и другие примитивы для реализации этого эксплойта:
access token эксплойта в ring0 через функцию NtQuerySystemInformation() с параметром SystemHandleInformation.rtlSetAllBits() в качестве гаджета для перезаписи access_token.privileges эксплойта значениями 0xFF.rtlSetAllBits() в ring0 путем утечки базового адреса модуля ntoskrnl.exe через функцию EnumDeviceDrivers().BitMapHeader таким образом, чтобы позволить перезаписать access_token.privileges эксплойта.BitMapHeader через примитив NtSetInformationThread() и утечка адреса выделения в большом пуле через функцию NtQuerySystemInformation() с параметром SystemBigPoolInformation.EnumPrinters(), загружаем драйвер одного из них, затем перехватываем вызовы к функции обратного вызова пользовательского режима DrvEnablePDEV().DrvEnablePDEV(), выполняем действия эксплойта, затем возвращаем то, что вернул проксированный вызов, обратно в GDI.ResetDC() в перехваченной функции DrvEnablePDEV().PDC путем распыления сфабрикованного объекта того же размера с использованием примитива CreatePalette().SeDebugPrivilege для получения NT AUTHORITY\SYSTEM путем внедрения шелл-кода в процесс winlogon.exe.Более подробную информацию можно найти в этой статье от Kaspersky.
Протестировано на Win10 Redstone (сборка 14393).