獨家首發 | CVE-2017-11816 GDI信息泄露漏洞分析
*本文原創作者:比爾.蓋茨,本文屬於FreeBuf原創獎勵計劃,禁止轉載
我的漏洞被別人先報了,所以就把這個漏洞的細節公布一下吧。寫的不是很詳細,有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文件格式即可。
*本文原創作者:比爾.蓋茨,本文屬於FreeBuf原創獎勵計劃,禁止轉載
TAG:FreeBuf |