您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關工業組態軟件整數溢出漏洞CVE-2018-7471的實例分析,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
CNVD-ID:CNVD-2018-00995
CVE ID:CVE-2018-7471
某公司工業組態軟件存在整數溢出漏洞,該漏洞是由于stgopenstorage讀取失敗,返回的錯誤代碼超出int在32位系統中的范圍,攻擊者可利用該漏洞執行任意代碼。
補丁信息:http://www.kingview.com/news_info.php?num=1000656
漏洞發布:http://www.cnvd.org.cn/flaw/show/CNVD-2018-00995
OpenStorage加載結構化存儲的文件,函數返回HRESULT類型變量。函數原型如下:
返回的結果為長整形:當函數讀取正常時,返回值為0,讀取失敗,返回長整型整數
函數說明參考MSDN:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa380024(v=vs.85).aspx
根據補丁對比,將漏洞組件確定為Touchvewocx.ocx。經分析,該模塊有五個函數有變化,其中三個進行了修改,逐一進行分析。
CViewManager::LoadDocInfor(CViewManager *this,CPicDocument *pd)
放大來看,主要是增加0x10022780部分的判斷程序塊。
3.1.1 補丁前
.text:100223C0 var_814 = dword ptr -814h
.text:100223C0var_810 = dword ptr -810h -int 32
.text:100223C0 pwcsName = dword ptr -80Ch
.text:100223C0 ppstgOpen = dword ptr -808h
var_810(v25)是一個值為負數的int32(函數調用錯誤是,返回一個負值,其高位為1)變量,系統為64位時,負數擴展高位補F。
3.1.2 補丁后
返回值為dword 類型,返回若不為S_OK,返回值轉換為Cstring(whar_t)后,進行異常處理。
.text:100223C0sc = dword ptr -810h
.text:100223C0 lpsz = dword ptr -80Ch
.text:100223C0 lpStorage = dword ptr -808h
修復后:
將字符串改為wchar
修補前:
修補后:
if ( StgIsStorageFile(lpsz) == 1 )
{
sc =StgCreateDocfile(lpsz, 0x30022u, 0, &lpStorage);
if ( sc< 0 || !lpStorage )
sc =StgCreateDocfile(lpsz, 0x30000u, 0, &lpStorage);
}
else
{
sc =StgOpenStorage(lpsz, 0, 0x10022u, 0, 0, &lpStorage);
if ( sc< 0 || !lpStorage )
sc =StgOpenStorage(lpsz, 0, 0x10000u, 0, 0, &lpStorage);
}
if ( sc )
{
sc = 1;
v62 = 0;
LOBYTE(v114) = 6;
AFX_EXCEPTION_LINK::~AFX_EXCEPTION_LINK(&_afxExceptionLink);
LOBYTE(v114) = 5;
CPicDocument::~CPicDocument(&PicDoc);
LOBYTE(v114) = 4;
CFileException::~CFileException(&e);
LOBYTE(v114) = 3;
CString (&message);
LOBYTE(v114) = 2;
CString (&failSz);
LOBYTE(v114) = 1;
CString (&pd_picName);
LOBYTE(v114) = 0;
CString (&viewfilename);
v114 = -1;
CString (&filename);
v4 =v62;
}
Touchvewocx的接口如下:
函數調用路徑:
可以基本確定漏洞ActiveX接口為SetProjectPath
ActiveX組件Touchvewocx.ocx接口函數SetProjectPath(string*)調用OpenStorage( )讀取失敗是,異常返回長整型(32位系統32位int,64位系統,64位int),函數給返回值分配dword型變量,在32位系統中剛好滿足,64位系統中直接截斷,造成異常。
看完上述內容,你們對工業組態軟件整數溢出漏洞CVE-2018-7471的實例分析有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。