CVE-2021-1732 windows10本地提权漏洞
漏洞简介
2021年2月,DBAPPSecurity Threat Intelligence Center在野外发现了一个利用Windows10 x64系统上的一个零日漏洞的恶意软件样本。
该漏洞(CVE-2021-1732)是一个win32k窗口对象类型混淆导致的OOB(越界)写入漏洞,可用于在Windows内核中实现任意内存读写原语,以实现本地权限提升。攻击者在利用内存损坏型漏洞时,通常需要借助于读、写和执行原语,以绕过诸如Windows 10等操作系统上的DEP、ASLR和CFG等安全措施。不过,纯数据攻击只需要读写原语,因为它并不谋求在内存中执行恶意代码,而是操纵操作系统使用的数据结构以实现提权。
影响版本
Windows Server, version 20H2 (Server Core Installation)
Windows 10 Version 20H2 for ARM64-based Systems
Windows 10 Version 20H2 for 32-bit Systems
Windows 10 Version 20H2 for x64-based Systems
Windows Server, version 2004 (Server Core installation)
Windows 10 Version 2004 for x64-based Systems
Windows 10 Version 2004 for ARM64-based Systems
Windows 10 Version 2004 for 32-bit Systems
Windows Server, version 1909 (Server Core installation)
Windows 10 Version 1909 for ARM64-based Systems
Windows 10 Version 1909 for x64-based Systems
Windows 10 Version 1909 for 32-bit Systems
Windows Server 2019 (Server Core installation)
Windows Server 2019
Windows 10 Version 1809 for ARM64-based Systems
Windows 10 Version 1809 for x64-based Systems
Windows 10 Version 1809 for 32-bit Systems
Windows 10 Version 1803 for ARM64-based Systems
Windows 10 Version 1803 for x64-based Systems
漏洞描述
漏洞发生在Windows 图形驱动win32kfull!NtUserCreateWindowEx函数中的一处内核回调用户态分配内存与tagWND->flag属性设置不同步导致的漏洞。使得可以伪造这个tagWND->offset值发生内存越界。
当驱动sys调用NtUserCreateWindowEx创建窗口时会判断tagWND->cbWndExtra(窗口实例额外分配内存数),该值不为空时调用win32kfull!xxxClientAllocWindowClassExtraBytes函数回调用户层user32.dll!__xxxClientAllocWindowClassExtraBytes分配空间,分配后的地址使用NtCallbackReturn函数修正堆栈后重新返回内核层并保存并继续运行,而当tagWND->flag值包含0x800属性后该保存值变成了一个offset。
攻击者可以Hook user32.dll!_xxxClientAllocWindowClassExtraBytes函数调用NtUserConsoleControl修改tagWND->flag包含0x800属性值后使用NtCallbackReturn返回一个自定义的值到内核tagWND->offset。
漏洞利用
修复建议
更新微软官方补丁,可通过以下链接获取相关安全补丁:
https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-1732
参考资料
https://bbs.pediy.com/thread-266362.htm
https://nosec.org/home/detail/4940.html