关联漏洞
标题:
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付费,感谢您的支持。