Adobe Reader类型混淆导致代码执行漏洞分析(CVE-2018-12794) - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

Adobe Reader类型混淆导致代码执行漏洞分析(CVE-2018-12794)

41yf1sh 漏洞 2018-09-22 09:30:50
257817
收藏

导语:我们发现,在ZDI漏洞项目中提交的漏洞中,最常见的就是影响PDF文档的漏洞,而在这些漏洞中,大多数都涉及到Adobe Reader。因此,我们挑选了这些Adobe Reader中最有代表性的漏洞,进行详细地分析。

概述

我们发现,在ZDI漏洞项目中提交的漏洞中,最常见的就是影响PDF文档的漏洞,而在这些漏洞中,大多数都涉及到Adobe Reader。因此,我们挑选了这些Adobe Reader中最有代表性的漏洞,进行详细地分析。在Adobe Reader 2018年7月发布的更新中,包含CVE-2018-12794/ZDI-18-682的补丁。这一漏洞由Sebastian Apelt发现,并且提交了一份质量非常高的漏洞详情。

漏洞成因

产生这一漏洞的根本原因是类型混淆条件(Type Confusion Condition)。通过构建XML数据包(XML Data Package,XDP)模版,并对XML表单体系结构(XML Forms Architecture,XFA)对象执行某些JavaScript操作,攻击者就可以强制Adobe Reader从模版对象的边界引用数据。成功之后,将会在沙盒渲染器进程中实现代码执行。

漏洞详情

触发此漏洞所需的XDP模版非常简单:

1.png

该漏洞由两条JavaScript指令触发。通过将一个子表单附加到另一个子表单,我们可以触发底层Template对象的越界(Out-Of-Bounds)读取错误。在这种情况下,当一个子表单由xfa.template引用,一个由xfa.form引用,随后调用calling <object>.presence = “inactive”;时,就会产生漏洞。

2.png

启用页堆(Page Heap)后,在读取Template对象过程中发生越界读取时,就会在CMP指令的位置发生崩溃。虽然该对象的大小似乎只有0x140字节,但我们在偏移量0x1d0处取消引用的数据超出了缓冲区的边界。

3.png

深入分析

根据崩溃情况,我们唯一能够知道的是对象类型为0x7c00。通过查看Solaris 9.4.1中acroform.api的符号化版本,我们可以看到这个特定的类型id属于XFATemplateModelImpl对象,它只是来自底层XDP的“Template”对象:

4.jpg

回到非符号化的Windows版本的acroform.api,我们可以确认Template对象的大小为0x140字节,这也是从上面引用的越界对象的大小。我们只需要几个步骤,就能够找到它的大小:

1、在Acroform.api中找到静态变量0x7c00并查找XFATemplateModelImpl::Type方法。

5.jpg

2、通过前后参照,我们得到XFATemplateModelImpl虚函数表(Vtable)。

6.jpg

3、对虚函数表进行前后参照(Xref),得到构造函数。

4、对构造函数进行前后参照,并向上滚动几行,将会展示出对象的大小,即0x140字节:

7.jpg

由于我们导致Template对象的越界读取,因此可以推测,代码正在期望一个更大的对象,而不是Template对象。同时,这一点也说明了在这里发生了类型混淆的问题。最有可能的情况就是,类型混淆的问题发生在xfa.template和xfa.form对象之间。尽管xfa.template的大小为0x140字节,但xfa.form对象的大小为0x270字节。

漏洞利用

我们无法在Template对象实例化之前去执行JavaScript代码,因此控制其崩溃并非一件容易的事。为了实现这一点,在XDP解析发生之前,需要在PDF解析过程中或其他受控制的数据处理期间,利用漏洞进行可以控制的分配和释放。控制崩溃发生的另一种方法,是构建一个PDF,其中包含能触发漏洞的附加PDF。Feng shui这个堆必须发生在外部PDF中,并触发内部(附加的)PDF中的漏洞。在这里,要使其以执行JavaScript代码的方式打开附加的PDF,还需要对权限进行提升。因此,该方法可能对大多数用户都无效。

实际上,也可以在没有页堆的情况下,执行poc.pdf来观察可以控制崩溃发生的情况。由于读取了Unicode字符的一部分,并将其用作指针,最终会导致其发生崩溃。以下是不使用页堆情况下的崩溃输出:

8.png

结论

如果大家想要自行测试这一漏洞,PoC位于:https://github.com/thezdi/PoC/tree/master/CVE-2018-12794 。该漏洞应该适用于2018.011.20040版本之前的Adobe Reader。

纵观我们今年发布的通告,我们发现其中有许多与PDF相关的漏洞。Adobe Reader可能是漏洞数量最多的PDF浏览器,同时Foxit中也存在大量漏洞。由于Adobe Reader被很多操作系统作为默认PDF渲染器使用,因此也不难解释,为什么众多调查人员都在针对Adobe Reader寻找漏洞。

在之后,我们还将持续关注其安全性,请大家继续跟随我们了解最新的漏洞利用技术和安全补丁情况。


  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

 
本站4hou.com,所使用的字体和图片文字等素材部分来源于原作者或互联网共享平台。如使用任何字体和图片文字有侵犯其版权所有方的,嘶吼将配合联系原作者核实,并做出删除处理。
©2022 北京嘶吼文化传媒有限公司 京ICP备16063439号-1 本站由 提供云计算服务