首页
论坛
课程
招聘
[原创]Windows condrv.sys 本地拒绝服务漏洞分析
2021-1-20 02:34 3679

[原创]Windows condrv.sys 本地拒绝服务漏洞分析

2021-1-20 02:34
3679

今天这个蓝屏比较火,故做了下分析

 

直接原因分析:
漏洞堆栈如下:

 

从堆栈可以看到,当用户态打开路径\.\globalroot\device\condrv\kernelconnect时,内核对象管理器会依次解析对象目录,直到解析到\device\condrv 发现这是个设备对象,而设备对象的设备类型是有ParseProcedure例程的.故调用设备的对象的ParseProcedure即函数IopParseDevice. 函数内部在处理完请求会去关闭打开的文件对象.

 

关闭文件对象内核会调用相应的驱动的IRP例程. IRP_MJ_CLEANUP 以及IRP_MJ_CLOSE。
即condrv驱动的函数:CdpDispatchCleanup CdpDispatchClose.

 

而CdpDispatchCleanup在处理IRP_MJ_CLEANUP时会尝试引用文件对象FILE_OBJECT的FsContext成员,此成员应该为驱动condrv自己创建的一个透明数据结构.但是事实是这个成员是未预期的值NULL. 所以导致空指针引用蓝屏.如下图:

 


 

根因分析:
我们可以假设这个文件对象是“非法”的,那么可能从它创建初始化的时候就出现问题。对内核有了解的应该知道,如果要引用设备对象那么必然要有打开操作即肯定要向condrv驱动发送IRP: IRP_MJ_CREATE 那么我看下condrv驱动的Create例程:

 

如上图所示,它其实是在循环比较要打开的文件名是不是预先定义的如果是则调用相应的回调函数 如下图:

由于Poc打开的是kernelconnect 所以我们看下函数CdCreateKernelConnection

 

第一个判断就是如果先前模式是usermode 则返回拒绝. 也就是condrv驱动的设计初衷就是不允许用户态直接访问这个符号链接.

 

但是问题出就处在此处返回拒绝上. 因为这是在处理IRP,它没有设置IRP的状态码以及调用IoCompleteRequest 来结束IRP.

 

如上图可以看到Irp->IoStatus.Status 为0. 而0 表示成功.
而在IopPraseDevice中是以IRP的IoStatus.Status成员来判断IoCallDriver是否成功.也就是本意是拒绝用户态打开这个符号链接,但实际因为开发疏忽导致内核认为打开成功.此时文件对象的fscontext成员没有被condrv赋值. 所以当关闭文件对象时,导致蓝屏。实际测试修改
IRP的IoStatus.Status的值为失败时,不会蓝屏。

 

总结:
其实归根到底就是condrv的驱动开发人员在处理IRP_MJ_CREATE时,没有正确处理拒绝情况, 导致本应该失败的 内核误以为是成功. 进而在后续对文件对象的操作时蓝屏.

 

#


看雪侠者千人榜,看看你上榜了吗?

收藏
点赞0
打赏
分享
最新回复 (9)
雪    币: 14
活跃值: 活跃值 (106)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ZwTrojan 活跃值 2021-1-20 08:40
2
0
从用户态的角度来看,为什么Chrome系和FireFox会触发蓝屏而旧浏览器不会呢
雪    币: 1781
活跃值: 活跃值 (412)
能力值: ( LV12,RANK:480 )
在线值:
发帖
回帖
粉丝
熊猫正正 活跃值 9 2021-1-20 09:12
3
0
哥来了
雪    币: 540
活跃值: 活跃值 (220)
能力值: ( LV12,RANK:320 )
在线值:
发帖
回帖
粉丝
evilkis 活跃值 7 2021-1-20 09:32
4
0
ZwTrojan 从用户态的角度来看,为什么Chrome系和FireFox会触发蓝屏而旧浏览器不会呢
浏览器只是一个输入点不是触发蓝屏的必要条件. 其实分析已经很清楚了 就是用户态直接打开这个链接导致的蓝屏. 可以自己写poc 调用API:CreateFile 文件名填写这个符号链接即可触发蓝屏. 所以你说的旧浏览器不会触发 应该是旧浏览器没有触发对这个符号链接的打开 。
雪    币: 7604
活跃值: 活跃值 (1745)
能力值: ( LV15,RANK:720 )
在线值:
发帖
回帖
粉丝
银雁冰 活跃值 14 2021-1-20 10:52
5
0
这个漏洞半年前就公开了:https://twitter.com/waleedassar/status/1281551510640504833
雪    币: 540
活跃值: 活跃值 (220)
能力值: ( LV12,RANK:320 )
在线值:
发帖
回帖
粉丝
evilkis 活跃值 7 2021-1-20 11:11
6
0
银雁冰 这个漏洞半年前就公开了:https://twitter.com/waleedassar/status/1281551510640504833
看到了, 只是网上没有分析文章   这里是分析一下成因
雪    币: 119
活跃值: 活跃值 (33)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
zhangtaopy 活跃值 1 2021-1-21 09:32
7
0
大哥牛逼
雪    币: 153
活跃值: 活跃值 (419)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
fengyunabc 活跃值 1 2021-1-23 17:03
8
0
理解这个漏洞确实需要已经对对象管理器以及FILE_OBJECT.FsContext了解。
雪    币: 235
活跃值: 活跃值 (178)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
killleer 活跃值 2021-1-27 08:55
9
0
银雁冰 这个漏洞半年前就公开了:https://twitter.com/waleedassar/status/1281551510640504833
发现人有复数人,没有人确认或者具体触发方式,只是那个人确定并公布了准确触发的poc,不然不可能微软半年不搭不理的
雪    币: 533
活跃值: 活跃值 (372)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
0346954 活跃值 2021-1-28 10:49
10
0
学习了 谢谢
游客
登录 | 注册 方可回帖
返回