内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

某工业组态软件整数溢出漏洞(CVE-2018-7471)分析

2018-05-15 14:48 出处:清屏网 人气: 评论(0

0×1 漏洞信息

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

0×2 OpenStorage函数说明

OpenStorage加载结构化存储的文件,函数返回HRESULT类型变量。函数原型如下:

返回的结果为长整形:当函数读取正常时,返回值为0,读取失败,返回长整型整数

函数说明参考MSDN:

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

0×3查找漏洞函数

根据补丁对比,将漏洞组件确定为Touchvewocx.ocx。经分析,该模块有五个函数有变化,其中三个进行了修改,逐一进行分析。

3.1 0x100223C0

CViewManager::LoadDocInfor(CViewManager *this,CPicDocument *pd)

放大来看,主要是增加0×10022780部分的判断程序块。

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

3.2 0×10039530

修复后:

将字符串改为wchar

3.3 0×10151880

修补前:

修补后:

f ( 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;

}

0×4 脆弱ActiveX接口确定

Touchvewocx的接口如下:

函数调用路径:


分享给小伙伴们:
本文标签: CVE-2018-747CVE整数溢出

相关文章

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

CopyRight © 2015-2016 QingPingShan.com , All Rights Reserved.

清屏网 版权所有 豫ICP备15026204号