漏洞简介
cve-2023-21768 是一个 Windows 11 22H2 系统中的本地权限提升漏洞,该漏洞源于AFD.sys这个模块。
漏洞分析
首先我们要有一个Windows 11 22H2的系统(运行在虚拟机),找到AFD.sys并复制出来,另外要将对应的后向差分补丁取出(这里名为afd1.sys)
将其回退,
1 | py C:\xxx\delta.py -i .\afd.sys -o .\afd_pathed.sys .\r\afd1.sys |
打上cve-2023-21768的前向补丁,
1 | py C:\xxx\delta.py -i .\afd_pathed.sys -o .\afd_pathed2.sys "C:\xxx\kb5022303\xxx\f\afd.sys" |
使用Bindiff查看哪些函数被修改,
查看补丁后的AfdNotifyRemoveIoCompletion函数,
不难发现,
1 | if ( a1 ) |
此处意为,如果a1为true(即从用户态进入该驱动),判断*(a3 + 24)的值是否为合法的用户态地址。
也就是说,在未打补丁的情况下,如果我们将*(a3 + 24)的值构造为内核态地址,我们就可以对内核中的数据进行修改。
另外需要注意的是,我们只能将其修改为0x01,因为v20固定为1。
漏洞利用
这里我们直接分析https://github.com/chompie1337/Windows_LPE_AFD_CVE-2023-21768之中的代码。
该exp中利用漏洞修改IoRing在内核中数据结构的RegBuffers、RegBuffersCount,将它们改为0x01000000和0x01。
1 | 0: kd> dt nt!_IORING_OBJECT |
这样IoRing在处理数据是会使用地址0x01000000的数据,而该地址位于用户态,可以直接编写用户态程序进行修改,然后利用IoRing相关的API进行利用。