當前位置:
首頁 > 最新 > 某工業組態軟體整數溢出漏洞分析

某工業組態軟體整數溢出漏洞分析

0x1 漏洞信息

CNVD-ID:CNVD-2018-00995

CVE ID:CVE-2018-7471

某公司工業組態軟體存在整數溢出漏洞,該漏洞是由於stgopenstorage讀取失敗,返回的錯誤代碼超出int在32位系統中的範圍,攻擊者可利用該漏洞執行任意代碼。

漏洞發布:http://www.cnvd.org.cn/flaw/show/CNVD-2018-00995

0x2 OpenStorage函數說明

OpenStorage載入結構化存儲的文件,函數返回HRESULT類型變數。函數原型如下:

返回的結果為長整形:當函數讀取正常時,返回值為0,讀取失敗,返回長整型整數

函數說明參考MSDN:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa380024(v=vs.85).aspx.aspx)

0x3查找漏洞函數

根據補丁對比,將漏洞組件確定為Touchvewocx.ocx。經分析,該模塊有五個函數有變化,其中三個進行了修改,逐一進行分析。

CViewManager::LoadDocInfor(CViewManagerthis,CPicDocumentpd)

3.1.1 補丁前

var_810(v25)是一個值為負數的int32(函數調用錯誤是,返回一個負值,其高位為1)變數,系統為64位時,負數擴展高位補F。

3.1.2 補丁後

返回值為dword 類型,返回若不為S_OK,返回值轉換為Cstring(whar_t)後,進行異常處理。

修復後:

將字元串改為wchar

修補前:

修補後:

0x4 脆弱ActiveX介面確定

Touchvewocx的介面如下:

函數調用路徑:

可以基本確定漏洞ActiveX介面為SetProjectPath

0x5 結論

ActiveX組件Touchvewocx.ocx介面函數SetProjectPath(string*)調用OpenStorage( )讀取失敗是,異常返回長整型(32位系統32位int,64位系統,64位int),函數給返回值分配dword型變數,在32位系統中剛好滿足,64位系統中直接截斷,造成異常。

*本文原創作者:flypuma,轉載請註明來自FreeBuf.COM


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

蘋果Siri被曝隱私漏洞:鎖屏通知直接讀取
利用緩存服務形成的SSRF和其它客戶端形式滲透

TAG:FreeBuf |