一次失败的CVE-2020-1394漏洞分析

 

漏洞背景

最近微软更新榜上RPC和COM类型的相关的内存破坏类漏洞比较多,目前也在研究,但是一直研究了一个多月也没挖到。然后想到不如先自己去补丁对比看看都有哪些类型的错误,后续自己也可以找找相似的点,可惜现在微软对于这类漏洞不给予赏金了,不过混个CVE也是极好的。

最终选取了CVE-2020-1394这个漏洞去研究下,这个漏洞由360的漏洞挖掘机Peng神发现。

 

漏洞分析

通过windows 7月补丁公告看到这个漏洞是 Windows Geolocation Framework这个服务造成的。

那么从什么地方入手呢?我们可以通过oleview去搜索local service相关的服务。可以搜索到相关的服务。


最终经过一系列排查发现LocationFramework.dll这个库里面的函数做了相应的修改,也比较符合最近RPC函数内存破坏类的一些特征。

通过IDA的补丁对比发现有6处函数修改,都是一些put和get类的函数,猜想这是一个竞争条件引起的漏洞。

 

由于函数不是很多,我们看下这些函数补丁前后对比的变化。


补丁前


补丁后


补丁前


补丁后


补丁前


补丁后

补丁前


补丁后

经过观察上面的那些函数虽然修补了,但是没发现存在什么问题,应该是顺手修补的。来看下最后关键的几个函数。具体补丁前后就不对比了,反正是加锁,防止竞争条件。

 

跟踪到ATL::AtlComPtrAssign函数里面,可以看到如下代码

 

CVisitInformation::get_PositionInfo函数代码

 

看到上面的release,基本上可以确定这是一个竞争条件导致的UAF漏洞了。由此可以确定这个问题所产生的原因了,因为put释放,然后get中引用而导致产生的UAF问题。由于这里面PoC构造有点问题,最终也没复现出漏洞。原因是这个接口无法直接调用,需要通过其他接口去调用,但是其他接口传入一个结构体,最终卡在结构体上面,问Peng神要PoC想复现下漏洞,但是Peng神也找不到了,就此作罢。

 

总结

这是一个竞争条件造成的UAF问题,最终没有构造出PoC真是一个小小的遗憾,如果有人能有PoC也发我一份,学习下。本人刚刚接触RPC和COM漏洞,能力有限,如有错误请斧正。

(完)