极点五笔输入法一处内存异常释放

漏洞概要

缺陷编号:WooYun-2012-011599

漏洞标题:极点五笔输入法一处内存异常释放

相关厂商:极点五笔输入法

漏洞作者:xsjswt

提交时间:2012-08-31 14:33

公开时间:2012-08-31 14:33

漏洞类型:拒绝服务

危害等级:低

自评Rank:1

漏洞状态:未联系到厂商或者厂商积极忽略

Tags标签:

漏洞详情

披露状态:

2012-08-31: 积极联系厂商并且等待厂商认领中,细节不对外公开
2012-08-31: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

极点五笔输入法一处内存异常释放导致宿主进程退出

详细说明:

极点五笔输入法存在一处内存异常释放,导致宿主进程退出的BUG。由于在调试机器上无法复现次问题,无法进一步分析是否能利用。(问题反复出现在老大秘书的机器上,但是秘书机器有各种秘密文件,我不能上去调试,只能如此了)极点五笔输入法7.13会记录用户输入4个键根仍然未匹配上要打的字,然后紧接着按键,且能匹配上的词组,应该是用于分析输入的那4个键与紧接的词组关系,添加词库之类。但是在老大秘书的电脑上,频繁出现崩溃的情况(具体体现为按键快,打错字的时候经常导致qq,word等崩溃的情况)。抓了一个qq崩溃的dump回来看,发现是试图读取已经释放的内存,但是又木有SEH处理导致的崩溃。

漏洞证明:

创建匿名FileMap分配内存

将FileMap对象map进内存里来,在我的XP SP3上map base=0xbe0000

多次输入无效后,首个有效输入会被记录

对记录的输入进行分析。在我的调试环境下,此处内存一直未被释放,怀疑为输入特定的字符会导致别处的线程进行Unmap操作,而分析线程仍然去读取数据导致的。因为创建map的函数返回后会紧接着做出判断

故unmap操作只能理解为程序退出的析构。如果特定的输入能导致线程做出退出之类的判断,怀疑也能做其他的事情,因为没有环境,无法进一步分析。要分析老大不让。

修复方案:

1. 仔细分析下用户输入和处理用户输入的逻辑是否存在问题2. 进行内存读写操作前使用IsBadReadPtr/IsBadWritePtr进行判断,虽然按照MJ的说法,这两个API并不靠谱3. try/catch or __try/__except

漏洞回应

厂商回应:

未能联系到厂商或者厂商积极拒绝

评价

  1. 2010-01-01 00:00 pangshenjie 白帽子 | Rank:110 漏洞数:14)

    看不懂,膜拜。