
Exploit de LPE para un UAF en Windows (CVE-2021-40449).
Mi exploit para CVE-2021-40449, un LPE de Windows mediante un UAF en win32kfull!GreResetDCInternal.
Además de la vulnerabilidad UAF, se utilizan otras primitivas para hacer posible este exploit:
access token del exploit en ring0 mediante la función NtQuerySystemInformation() con el parámetro SystemHandleInformation.rtlSetAllBits() como gadget para sobrescribir los access_token.privileges del exploit con 0xFFs.rtlSetAllBits() en ring0 filtrando la dirección base del módulo ntoskrnl.exe mediante la función EnumDeviceDrivers().BitMapHeader del gadget de tal manera que nos permita sobrescribir los access_token.privileges del exploit.BitMapHeader creado mediante la primitiva NtSetInformationThread() y filtrar la dirección de asignación en el big pool mediante la función NtQuerySystemInformation() con el parámetro SystemBigPoolInformation.EnumPrinters(), cargamos el controlador de una de ellas y luego enganchamos las llamadas a la función de devolución de llamada en modo usuario DrvEnablePDEV().DrvEnablePDEV(), hacemos lo del exploit y luego devolvemos lo que devuelve la llamada con proxy al GDI.ResetDC() en el DrvEnablePDEV() enganchado.PDC liberado mediante spraying de un objeto creado del mismo tamaño usando la primitiva CreatePalette().SeDebugPrivilege adquirido para obtener NT AUTHORITY\SYSTEM inyectando shellcode en el proceso winlogon.exe.Se puede encontrar más información en este artículo de Kaspersky.
probado en Win10 Redstone (build 14393).