独家首发 | CVE-2017-11816 GDI信息泄露漏洞分析

2018-02-27 11:53:30 浏览数 (1)

我的漏洞被别人先报了,所以就把这个漏洞的细节公布一下吧。写的不是很详细,有poc大家可以自己调一调。

这个漏洞主要是因为GDI32种在处理metafile META_DIBSTRETCHBLT record 时候内存拷贝,越界读,导致的信息泄露漏洞。

图一

在GDI32中,bMetaGetDIBInfo调用SignedCJSCANto函数,并计算buffer的大小。这个buffer的大小由图一中标有下划线的值来确定。分别是:0x100019 0x200 0x8.

在SignedCJSCAN函数中, SignedCJSCAN调用CJSCAN函数,

在图二中,a1初始值是0x10001c,a3是0x8(即上面所说的位置的值)

在CJSCAN函数中,经过遍历a1(初始值是0x100019)经过UlongLongTolong ,ULongAdd函数来进行数值转换。到最后

变量a4 的值是0x10001c,如下图所示

图二

经过图二中的函数计算,得到buffer的大小,0x10001c*0x200=0x20003800,入图3所示。(0x200即poc中蓝色下滑线的值)

图三

然后就是申请内存,内存大小就是上面的步骤计算出来的值,0x2000c000,如图4

图四

然后MRBDIB::vInit 函数拷贝 wmf record数据,从poc 0x11d2偏移位置开始拷贝,如图5,由于拷贝的大小没有经过严格交验,导致拷贝的内存大小可以任意被控制,最后导致读越界,从而造成了,堆数据泄露,等其他敏感信息泄露漏洞。

图五

这个漏洞可以在wordpad outlook直接触发,如果想在edge,ie中触发需要修改一下poc中的某些数据

测试环境:win7 32bit 漏洞影响系统:win7 到win10 32 bit ,64bit 重现方式:将poc文件,拖拽到wordpad中即可触发漏洞。 poc 地址:https://pastebin.com/G5BE5v5Q

把十六进制数据贴到010editor,然后保存成wmf文件格式即可。

0 人点赞