我对 CVE-2021-40449 的漏洞利用,这是一个通过 win32kfull!GreResetDCInternal 中的 UAF 实现的 Windows 本地权限提升漏洞。
除了 UAF 漏洞之外,还使用了其他原语来实现此漏洞利用:
NtQuerySystemInformation() 函数配合 SystemHandleInformation 参数,在 ring0 泄漏漏洞利用进程的 access token 地址。rtlSetAllBits() 作为 gadget,将漏洞利用进程的 access_token.privileges 覆盖为 0xFF。EnumDeviceDrivers() 函数泄漏 ntoskrnl.exe 模块的基地址,从而在 ring0 泄漏 rtlSetAllBits() 的地址。BitMapHeader,以便允许我们覆盖漏洞利用进程的 access_token.privileges。NtSetInformationThread() 原语分配构造好的 BitMapHeader,并使用 NtQuerySystemInformation() 函数配合 SystemBigPoolInformation 参数泄漏大池中的分配地址。EnumPrinters() 枚举系统上的打印机,加载其中一台打印机的驱动程序,然后挂钩到用户模式回调函数 DrvEnablePDEV()。DrvEnablePDEV() 函数,执行漏洞利用操作,然后将代理调用返回的结果返回给 GDI。DrvEnablePDEV() 中第二次调用 ResetDC() 来触发 UAF。CreatePalette() 原语喷射相同大小的构造对象,以回收被释放的 PDC 对象。SeDebugPrivilege 权限,通过将 shellcode 注入 winlogon.exe 进程来获取 NT AUTHORITY\SYSTEM。更多信息可以参见卡巴斯基的这篇文章。
已在 Win10 Redstone(build 14393)上测试。