POC详情: 53dd31d72955435335b32d41a1a77d09b9393912

来源
关联漏洞
标题: Microsoft Win32k 缓冲区错误漏洞 (CVE-2021-1732)
描述:Microsoft Win32k是美国微软(Microsoft)公司的一个用于Windows多用户管理的系统文件。 Microsoft Win32k 中存在缓冲区错误漏洞。以下产品及版本受到影响:Windows 10 Version 1803 for 32-bit Systems,Windows 10 Version 1803 for x64-based Systems,Windows 10 Version 1803 for ARM64-based Systems,Windows 10 Version 1
介绍
# CVE-2021-1732

- 漏洞发生在Windows 图形驱动`win32kfull!NtUserCreateWindowEx`函数中的一处内核回调用户态分配内存与tagWND->flag属性设置不同步导致的漏洞。使得可以伪造这个`tagWND->offset`值发生内存越界。
- 当驱动win32kfull.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。

1. 漏洞发生在Windows 图形驱动`win32kfull!NtUserCreateWindowEx`中。
2. 当驱动`win32kfull.sys`调用`NtUserCreateWindowEx`创建窗口时会判断`tagWND->cbWndExtra`(窗口实例额外分配内存数),该值不为空时调用`win32kfull!xxxClientAllocWindowClassExtraBytes`函数回调用户层`user32.dll!__xxxClientAllocWindowClassExtraBytes`创建内存,分配后的地址使用`NtCallbackReturn`函数修正堆栈后重新返回内核层并保存并继续运行,而当`tagWND->flag`值包含0x800属性时候对该值采用offset 寻址。
3. 使用`NtUserConsoleControl`修改flag包含0x800属性。

`17763:[[gpKernelHandleTable] + 0x18 * ((hwnd->cx * [gSharedInfo+0x10]) >> 5)]`

提到调用`NtUserConsoleControl`会重新设置`tagWND->offset`跟`tagWND->flag`值包含`0x800`属性, flag值包含`0x800`属性采用offset 寻址。我们在当前调用`NtUserConsoleControl`的目的就是修改`tagWND->flag`值包含0x800属性,  再调用`NtCallbackReturn`函数返回指定值目的是重新修改`tagWND->offset`, 因为`win32kfull!xxxClientAllocWindowClassExtraBytes`会把返回值放入到`tagWND->offset`

`+0x058 KernelCallbackTable : 0x00007ffb0e9d1070 Void`

`00007ffb`0e9d1448`
文件快照

[4.0K] /data/pocs/53dd31d72955435335b32d41a1a77d09b9393912 ├── [4.0K] CVE-2021-1732 │   ├── [6.9K] CVE-2021-1732.vcxproj │   ├── [ 955] CVE-2021-1732.vcxproj.filters │   └── [ 14K] exp.cpp ├── [1.4K] CVE-2021-1732.sln ├── [1.0K] LICENSE └── [2.1K] README.md 1 directory, 6 files
神龙机器人已为您缓存
备注
    1. 建议优先通过来源进行访问。
    2. 如果因为来源失效或无法访问,请发送邮箱到 f.jinxu#gmail.com 索取本地快照(把 # 换成 @)。
    3. 神龙已为您对POC代码进行快照,为了长期维护,请考虑为本地POC付费,感谢您的支持。