
Exploit di LPE per un UAF in Windows (CVE-2021-40449).
Il mio exploit per CVE-2021-40449, un LPE di Windows tramite UAF in win32kfull!GreResetDCInternal.
insieme alla vulnerabilità UAF, vengono utilizzate altre primitive per rendere possibile questo exploit:
access token dell'exploit in ring0 tramite la funzione NtQuerySystemInformation() con il parametro SystemHandleInformation.rtlSetAllBits() come gadget per sovrascrivere i privileges dell'access_token dell'exploit con 0xFF.rtlSetAllBits() su ring0 rivelando l'indirizzo base del modulo ntoskrnl.exe tramite la funzione EnumDeviceDrivers().BitMapHeader del gadget in modo tale da permetterci di sovrascrivere i privileges dell'access_token dell'exploit.BitMapHeader creato tramite la primitiva NtSetInformationThread() e rivelare l'indirizzo di allocazione nel big pool tramite la funzione NtQuerySystemInformation() con il parametro SystemBigPoolInformation.EnumPrinters(), carichiamo il driver di una di esse, quindi hookiamo le chiamate alla funzione callback usermode DrvEnablePDEV().DrvEnablePDEV(), facciamo le cose dell'exploit, poi restituiamo ciò che viene restituito dalla chiamata proxata al GDI.ResetDC() nell'DrvEnablePDEV() hookato.PDC liberato tramite spraying di un oggetto creato della stessa dimensione usando la primitiva CreatePalette().SeDebugPrivilege appena acquisito per ottenere NT AUTHORITY\SYSTEM tramite l'iniezione di shellcode nel processo winlogon.exe.Maggiori informazioni si possono trovare in questo articolo di Kaspersky.
testato su Win10 Redstone (build 14393).