漏洞概要 关注数(24) 关注此漏洞
缺陷编号:wooyun-2015-099569
漏洞标题:2345安全卫士驱动内存破坏
相关厂商:2345网址导航
漏洞作者: 小马宝利
提交时间:2015-03-10 12:22
修复时间:2015-06-09 17:12
公开时间:2015-06-09 17:12
漏洞类型:拒绝服务
危害等级:中
自评Rank:10
漏洞状态:厂商已经确认
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]
Tags标签: 无
漏洞详情
披露状态:
2015-03-10: 细节已通知厂商并且等待厂商处理中
2015-03-11: 厂商已经确认,细节仅向厂商公开
2015-03-14: 细节向第三方安全合作伙伴开放
2015-05-05: 细节向核心白帽子及相关领域专家公开
2015-05-15: 细节向普通白帽子公开
2015-05-25: 细节向实习白帽子公开
2015-06-09: 细节向公众公开
简要描述:
2345安全卫士某驱动存在内存破坏型bug。
详细说明:
2345Regmon.sys中ControlCode为0x222058的处理逻辑中存在一个内核paged pool溢出。
这个ControlCode的处理逻辑中存在一个将参数中的ansi字符串转存到内核申请的内存中的过程。
处理流程如下:
首先将InputBuffer中的某些部分作为字符串创建AnsiString。然后调用一个处理函数,就是这个函数中触发了漏洞。
可以看出VulFunc函数接受了3个参数,分别是[InBuffer+0x8], 0, 一个从Inbuffer中转换过来的AnsiString。
下面分析VulFunc函数,
函数首先调用AllocSome申请了两段内存。
申请了两块固定大小的内存,分别为0x48c字节的Buf1和0x258字节的Buf2。Buf2存放在[Buf1+0x18]处。
然后将参数3转换成UnicodeString。
用参数3转换的UnicodeString的长度和指针填充了Buf1中的部分域,然后由于参数2为0,所以直接跳转到loc_1f56a执行,调用VulFunc2。
然后VulFunc2中又调用了VulFunc3最终调用了导致这次溢出的罪魁祸首vulTriger
这里我要说一下。。我是第一次调这种类型的东西,这个溢出位置是我在调试出出错的池是Buf2所在的池后用!pool 调用一个函数就测试一下pool是否损坏了。一点一点查出来了。不知道有没有什么更简单的办法。
仔细观察一下vulTriger其实是一个字符串拷贝,将上面提到的由inBuffer中转换来的UnicodeString的字符串拷贝到Buf2中。
就是这个拷贝操作溢出了,BUF2是固定长度的但是UnicodeString没有限制长度,超出了BUF2的长度。
另外。其实不少地方都没判断好用户层发送过来的数据长度(或者偏移??),只不过别的可能是越界读。
我是菜鸟就不探究具体能不能利用了。
就酱。。有点晚了。VulFunc3函数里其实我没仔细分析。具体的长度和目的缓冲区好像还有个计算过程。不过应该没啥问题铁定是这能溢出。实测结果就是给BUF2拷贝7XXX个字符。
漏洞证明:
修复方案:
做好判读。。
版权声明:转载请注明来源 小马宝利@乌云
漏洞回应
厂商回应:
危害等级:中
漏洞Rank:6
确认时间:2015-03-11 17:10
厂商回复:
已确认,漏洞我们会尽快修复,感谢您对2345的关注
最新状态:
暂无