某工業組態軟體整數溢出漏洞分析
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。經分析,該模塊有五個函數有變化,其中三個進行了修改,逐一進行分析。
3.1 0x100223C0
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
※蘋果Siri被曝隱私漏洞:鎖屏通知直接讀取
※利用緩存服務形成的SSRF和其它客戶端形式滲透
TAG:FreeBuf |