
LPE exploit for a UAF in Windows (CVE-2021-40449).
Mon exploit pour CVE-2021-40449, une élévation de privilèges locale (LPE) Windows via une UAF dans win32kfull!GreResetDCInternal.
En plus de la vulnérabilité UAF, d'autres primitives sont utilisées pour rendre cet exploit possible :
jeton d'accès de l'exploit en ring0 via la fonction NtQuerySystemInformation() avec le paramètre SystemHandleInformation.rtlSetAllBits() comme gadget pour écraser les access_token.privileges de l'exploit avec des 0xFF.rtlSetAllBits() en ring0 en divulguant l'adresse de base du module ntoskrnl.exe via la fonction EnumDeviceDrivers().BitMapHeader du gadget de manière à nous permettre d'écraser les access_token.privileges de l'exploit.BitMapHeader fabriqué via la primitive NtSetInformationThread() et fuite de l'adresse d'allocation dans le grand pool via la fonction NtQuerySystemInformation() avec le paramètre SystemBigPoolInformation.EnumPrinters(), chargeons le pilote de l'une d'elles, puis hookons les appels à la fonction de rappel en mode utilisateur DrvEnablePDEV().DrvEnablePDEV() d'origine, effectuons les opérations de l'exploit, puis retournons ce qui est retourné par l'appel redirigé au GDI.ResetDC() dans le DrvEnablePDEV() hooké.PDC libéré en pulvérisant un objet fabriqué de la même taille en utilisant la primitive CreatePalette().SeDebugPrivilege nouvellement acquis pour obtenir NT AUTHORITY\SYSTEM en injectant du shellcode dans le processus winlogon.exe.Plus d'informations peuvent être trouvées dans cet article de Kaspersky.
Testé sur Win10 Redstone (build 14393).