欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

从BinDiff到0day:IE浏览器UAF漏洞分析

来源:本站整理 作者:佚名 时间:2019-09-17 TAG: 我要投稿

去年6月份,我向微软报告了IE浏览器中的一个UAF(释放后重用)漏洞,漏洞被官方定位严重级别,编号为CVE-2019-1208,微软在9月份的周二补丁日修复了这个漏洞。我通过BinDiff(一款二进制代码分析工具)发现了这个缺陷,编写了一个PoC来演示如何在Windows 10 RS5系统中利用该漏洞。

本文简要介绍了这个漏洞研究过程,如果想深入分析该漏洞,大家可参考这篇技术简报

0x01 CVE-2019-1208
前面提到过,CVE-2019-1208是一个UAF漏洞。这类安全问题会破坏数据有效性、导致进程崩溃,并且攻击者可以根据漏洞触发方式来执行任意代码或者远程代码。一旦成功利用CVE-2019-1208漏洞,攻击者就可以获得系统中与当前用户的相同权限。如果当前用户具备管理员权限,那么攻击者就可以劫持受影响的系统,比如安装或者卸载程序、查看并修改数据来创建具备完整权限的用户账户等。
 
0x02 潜在影响
在比较直观的攻击场景中,攻击者可以通过社会工程学方式向未知用户发送钓鱼邮件,诱导用户通过IE浏览器访问(包含CVE-2019-1208利用代码的)恶意站点即可。此外,攻击者也可以发送垃圾邮件,附件中包含该漏洞的利用代码。这些附件可以是启用了IE渲染引擎的微软Office文档,或者包含ActiveX控件的应用程序文件,然后在控件中包含漏洞利用代码。攻击者同样可以攻破与用户有数据交互(比如广告数据)的合法网站后,在上面托管利用代码。

图1. VbsJoin代码执行流
 
0x03 发现过程
故事源自于BinDiff,当时我想比较下微软在5月份和6月份的vbscript.dll中函数做了哪些改动(vbscript.dll是包含VBScript引擎相关API函数的一个模块)。我发现微软在SafeArrayAddRef、SafeArrayReleaseData以及SafeArrayReleaseDescriptor这几个函数上做了改动。
进一步研究后,在之前自己发现的另一个漏洞(CVE-2018-8373)的启发下,我通过如下步骤,使用VBScriptClass触发了一个UAF问题:
1、arr = Array(New MyClass):创建一个SafeArray,将VBScriptclass: MyClass保存在arr[0]中;
2、Callback: arr = Array(0):Join(arr)会触发MyClass的Public Default Property Get回调函数。这个回调中会为变量arr创建一个新的SafeArray。如图1所示,新的SafeArray并没有受SafeArrayAddRef函数保护。因此,浏览器正常设想的代码流会被这个回调函数打破;
3、arr(0) = Join(arr):当从Public Default Property Get回调函数返回后,VbsJoin的代码执行流将调用SafeArrayReleaseData以及SafeArrayReleaseDescriptor来减少SafeArrayData以及SafeArrayDescriptor的引用计数。然而,新的SafeArray不受SafeArrayAddRef保护,且SafeArrayData以及SafeArrayDescriptor的引用计数为0。因此,新的SafeArray的SafeArrayData以及SafeArrayDescriptor会在SafeArrayReleaseData以及SafeArrayReleaseDescriptor函数中释放,如图2所示。

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载