介绍
在过去的几年中,我们看到了关于Adobe的漏洞数量激增,可见Adobe Acrobat和Reader拥有相当大的关注度。虽然大多数这些漏洞都是些简单的文件分析问题,但也有不少XML Forms Architecture(XFA)
和JavaScript
漏洞。JavaScript漏洞对于攻击者来说是最有趣的,因为这给攻击者提供控制权(allocations/frees/spraying 等)
。Acrobat中的JavaScript引擎存在许多漏洞,我们今年发布的关于Acrobat的80条建议就是明证。
在这篇博文中,我将讨论我们通过程序ZDI-18-173收到的一个漏洞,它影响了setIntent
可选内容组(OCG) JavaScript
函数。这个漏洞很有趣,不仅是因为Adobe试图修补它的方式。我们接下来一起来看看吧!
概观
OCG用于控制页面内容的可见性。在Acrobat中,可以通过JavaScript创建和控制这些图层。
例如,我们可以通过addWatermarkFromText
函数创建一个简单的OCG
:
this.addWatermarkFromText(“AAA”);
我们可以通过getOCGs
函数检索OCGs
:
this.getOCGs();
OCG
对象公开了允许我们在一定程度上控制图层的各种属性和方法。我比较感兴趣setIntent
方法。该方法用于设置OCG intent
数组。
根据JavaScript API
参考,此函数将数组作为参数。我们可以从控制台验证这一点:
The Bug
setIntent
在内部实现Escript.api
,位于Acrobat
中的plug-ins
文件夹内。我不会深入研究如何在Escript
中找到setIntent
,我们将在以后的MindshaRE博客中讨论。
现在,让我们假设,我们设setInten
在Escript
:
我删除了sub_238B9F62
函数的反编译代码的一部分,只保留了其相关部分:
在上面的图2的[1]中,获取数组的长度属性并由攻击者完全控制。然后在上图中的[3]处,根据[2]计算的大小分配内存。最后,在[4]中,该长度用于溢出分配缓冲区的循环中:
POC
从逻辑上讲,任何导致wrap(> 0x7FFFFFFF)
的值都会带有易受攻击的代码路径。因此,在修正bug时应考虑到这个问题。然而,Adobe的开发人员决定采用修补程序快捷方式:
他们想确保大小不是完全 0x7FFFFFFF
。显然,这是不够的,因为这不是触发错误的唯一值。
一旦补丁出来,研究人员不会浪费时间。几个小时后,他直接给我们发送了补丁。POC看起来与原来的POC完全一样,但有一点小改变:将数组长度设置为0xFFFFFFFF
而不是0x7FFFFFFF
。同样,任何大于0x7FFFFFFF的
值都可以。下图是bypass:
这一次,Adobe的开发人员提出以下解决方案来避免整数换行:
结论
Adobe Acrobat的攻击面之大令人惊讶。想想有多少系统安装了Acrobat。更严重的是缺乏高级的缓解措施,使得它比其他应用程序更容易定位。再加上一些不太合适的补丁,这就是为什么它仍然是研究人员的热门目标。与其他厂商相比,Acrobat追赶现代还有很长的路要走,我们将密切关注他们的改进。在此之前,Acrobat可能仍然是寻找bug的目标。
发表评论
您还未登录,请先登录。
登录