CVE-2022-21882 bypass CVE-2021-1732

 

CVE-2022-21882

漏洞背景

2022年1月份,微软补丁日修补了一个CVE编号为CVE-2022-21882的漏洞,该漏洞模块为win32k,经过分析该漏洞为2021年Bitter组织对国内攻击时用到的CVE-2021-1732 本地提权漏洞的绕过,目前已经通过对比补丁已经写出了可以利用的EXP。

补丁对比

微软对多个消息处理函数进行了处理,处理方法大同小异

我们以xxxSwitchWndProc为例,其中有2个有意思的地方。

第一个为红色框,可以进行一次memcpy

第二个为椭圆框,可以重新设置tagWnd的0x128,也就是ExtraByte。

漏洞利用

申请ExtraByte的函数对应的应用层函数为_xxxClientAllocWindowClassExtraBytes,可以看到返回值由NtCallbackReturn决定,我们可以在应用层hook该函数,或许可以进行任意地址的返回,从而控制上述图中的pExtrabyte

经过调试发现,并不是所有的值都可以返回,该地址必须为用户态地址,因此任意地址写失败。

我们再来看第二种情况,在memcpy(虽然给的地址异常,但是并不会蓝屏,最终还是要回到内核态)之后可以把pExtrabyte设置到tagwnd的0x128偏移处,如果hook xxxClientAllocWindowClassExtraBytes函数并设置Extra Flag包含0x800标志位,那么不就是CVE-2021-1732的绕过了吗?(关于CVE-2021-1732在此不再做阐述)其实到这里,思路基本已经很清晰了,我们只需要在创建完成的窗口上,对xxxClientAllocWindowClassExtraBytes进行hook,在hook函数里面进行0x800的标志位设置,以及特殊地址的返回。

然后在合适的时机进行xxxSwitchWndProc函数的调用,笔者是通过微软未导出函数NtUserMessageCall

动态调试看一下,可以看到返回值为我们通过hook进行返回的偏移

成功设置到了0x128(ExtraByte)处

效果如下,代码基本与笔者在Github的CVE-2021-1732利用代码一致,只是稍微进行了修改。CVE-2021-1732只是在Createwindow中对xxxClientAllocWindowClassExtraBytes返回后,Extra Flag位进行了判断是否包含0x800,并未在其他场景进行限制,因此造成了漏洞可以bypass

 

关于我们

360沙箱云是 360 自主研发的在线高级威胁分析平台,对提交的文件、URL,经过静态检测、动态分析等多层次分析的流程,触发揭示漏洞利用、检测逃逸等行为,对检测样本进行恶意定性,弥补使用规则查杀的局限性,通过行为分析发现未知、高级威胁,形成高级威胁鉴定、0day 漏洞捕获、情报输出的解决方案;帮助安全管理员聚焦需关注的安全告警,过安全运营人员的分析后输出有价值的威胁情报,为企业形成专属的威胁情报生产能力,形成威胁管理闭环。解决当前政企用户安全管理困境及专业安全人员匮乏问题,沙箱云为用户提供持续跟踪微软已纰漏,但未公开漏洞利用代码的1day,以及在野0day的能力。

360混天零实验室成立于2015年,负责高级威胁自动化检测项目和云沙箱技术研究,专注于通过自动化监测手段高效发现高级威胁攻击;依托于 360 安全大数据,多次发现和监测到在野漏洞利用、高级威胁攻击、大规模网络挂马等危害网络安全的攻击事件,多次率先捕获在野利用 0day 漏洞的网络攻击并获得厂商致谢,在野 0day 漏洞的发现能力处于国内外领先地位,为上亿用户上网安全提供安全能力保障。

(完)