
Exploit de LPE para um UAF no Windows (CVE-2021-40449).
Meu exploit para CVE-2021-40449, um LPE do Windows via um UAF em win32kfull!GreResetDCInternal.
além da vulnerabilidade de UAF, outras primitivas estão sendo usadas para tornar este exploit possível:
access token do exploit no ring0 via função NtQuerySystemInformation() com o parâmetro SystemHandleInformation.rtlSetAllBits() como um gadget para sobrescrever os access_token.privileges do exploit com 0xFFs.rtlSetAllBits() no ring0 ao vazar o endereço base do módulo ntoskrnl.exe via função EnumDeviceDrivers().BitMapHeader do gadget de uma forma que nos permita sobrescrever os access_token.privileges do exploit.BitMapHeader criado via primitiva NtSetInformationThread() e vazando o endereço da alocação no big pool via função NtQuerySystemInformation() com o parâmetro SystemBigPoolInformation.EnumPrinters(), carregamos o driver de uma delas uma delas e então interceptamos as chamadas para a função de callback em modo usuário DrvEnablePDEV().DrvEnablePDEV(), fazemos as coisas do exploit e então retornamos o que foi retornado pela chamada com proxy para o GDI.ResetDC() no DrvEnablePDEV() interceptado.PDC liberado via spraying de um objeto criado do mesmo tamanho usando a primitiva CreatePalette().SeDebugPrivilege adquirido para obter NT AUTHORITY\SYSTEM via injeção de shellcode no processo winlogon.exe.Mais informações podem ser encontradas neste artigo da Kaspersky.
testado no Win10 Redstone (build 14393).