-
-
[原创]CVE-2012-1856 Office ActiveX控件MSCOMCTL.OCX UAF漏洞分析
-
发表于:
2018-1-8 12:49
8814
-
[原创]CVE-2012-1856 Office ActiveX控件MSCOMCTL.OCX UAF漏洞分析
stage1的shellcode首先还是通过egg-hunting技术定位stage2的shellcode。
stage2的shellcode也很简单,简而言之就是获取一系列的API之后下载一个远程文件并执行之。
这篇博客有一个很严重的技术问题,写文章的人很显然没有搞清楚自己分析的是哪个漏洞,他的逻辑是因为ActiveX XML文件中的classid 1EFB6596-857C-11D1-B16A-00C0F0283628和MSCOMCTL.OCX对应,所以该样本利用了ActiveX控件MSCOMCTL.OCX中的UAF漏洞CVE-2012-1856。
其实ActiveX喷射是Office漏洞利用中的一种常见heap spray技巧,CVE-2013-3906(TIFF解析中的整数溢出),CVE-2015-1641(RTF解析中的类型混淆),CVE-2016-7193(RTF解析中的数组越界),CVE-2017-11826(OOXML解析中的类型混淆)等等无一不是利用了ActiveX喷射获取程序控制流,它们的ActiveX XML文件差不多都是这样的。大概4年前Mcafee在CVE-2013-3906的野外0day样本中最早发现了这种技巧[6]。我给cisco talos写了邮件不过目前还没有收到回复。
更新:他们终于改过来了。
那么这个样本到底利用了哪个漏洞呢?我发现样本中的RTF控制字匹配CVE-2016-7193,并且进一步在调试器中验证了这一点。关于CVE-2016-7193,[4][5]已经分析得比较细致了,我就不再画蛇添足了。
那么CVE-2012-1856到底是一个什么样的漏洞呢?网上几乎到处都是CVE-2012-0158的分析,关于CVE-2012-1856的分析少之又少。不过我还是找到了一个利用该漏洞的样本[2]。这篇文章里面也没有说清楚漏洞成因,只是简单说了下shellcode。而在另一篇看起来像是启明星辰写的关于这个漏洞的分析报告里几乎都是正向分析,没有快速从崩溃现场定位漏洞发生处,显得十分繁琐[1]。
调试环境:XP/Win7+Office2007
资料下载:https://github.com/houjingyi233/office-exploit-case-study
另外要说一句,[3]中提供了MSCOMCTL.OCX的符号文件。貌似微软多年以前是提供MSCOMCTL.OCX的符号的,现在已经不提供了。虽然版本比较高的MSCOMCTL.OCX在IDA中不能直接加载它,但是可以先用版本比较低的MSCOMCTL.OCX在IDA中加载它,再通过bindiff得到版本比较高的MSCOMCTL.OCX的符号。在接下来的分析中符号起到了非常重要的作用。
Office中的内存破坏型漏洞由于软件版本众多,利用起来大多不太稳定。没有成功利用时出错信息如图所示。
根据所示的偏移在IDA中找到对应的位置。
那么通过符号文件我们可以知道函数名是CObj::Clear。通过调试可以发现在call dword ptr [ecx+8]处调用了CColumnHeader::AddRef。
在调试器中看到的某次崩溃时的现场如下所示。
在IDA中可以看到是因为调用了CTab::~CTab和CObj::~Cobj两个析构函数,并且因为CTab::~CTab是先被调用的,所以CTab应该是继承CObj对象的一个对象。那么结合CObj::Clear这个函数名和函数逻辑我们也应该知道这个函数的作用大概就是依次释放所有CTab对象,这也是打开文件没有报错,反而是在关闭时出错的原因。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2018-6-20 20:51
被houjingyi编辑
,原因: