Foxit Reader多个UAF漏洞解析

作者:网友投稿 时间:2018-10-13 09:41

字号
0×00 简介

9月28号著名PDF阅读器厂商福昕针对 Foxit Reader 和 Foxit PhantomPDF 发布了例行安全更新,在其安全公告上涉及了其中一个包含较多 CVE 编号的修补,其中包括了由 360 云影实验室发现并提交的 7 个 UAF 洞。

Foxit 对此修补的描述为:“解决了一个可能让程序发生Use-After-Free远程代码执行或Out-of-Bounds Read信息泄的问题,从而形成漏洞和崩溃。这个问题在执行特定的JavaScript代码时出现,当调用closeDoc函数后使用文档或其辅助对象时被触发。”

本文就简单说一下该系列漏洞。

Foxit Reader多个UAF漏洞解析

Foxit Reader多个UAF漏洞解析

0×01 第一次报告

关于这个攻击面的发现在Foxit Reader之前的例行安全更新中修补的远程命令执行漏洞CVE-2018-3924和CVE-2018-3939。这两个漏洞由Cisco Talos的Aleksandar Nikolic提交,在7月19号被修补,有意思的是在8月16号Foxit又发布更新修补了CVE-2018-3924和CVE-2018-3939,明显第一次修补存在一些问题。

这两个漏洞的详情可以在Talos的博客上看到:

https://www.talosintelligence.com/vulnerability_reports/TALOS-2018-0588

https://www.talosintelligence.com/vulnerability_reports/TALOS-2018-0606

0×02 CVE-2018-3924

PDF格式是允许嵌入JavaScript脚本的,从而可以在文档中实现更丰富的功能,比如动态修改文档内容,自动发送电子邮件等。而这一切需要由PDF阅读器提供的JavaScript引擎以及一系列内置函数的支持。触发崩溃的PoC如下:

var v1 = new Array();

function main() {

v1.toString = f;

app.activeDocs[0].mailForm({},v1,{},{},{},true,{});

}

function f() {

app.activeDocs[0].closeDoc();

return1;

}

该漏洞出在JavaScript内置类型Doc的mailForm()方法中,Doc类型是Adobe Acrobat API中定义的用于访问PDF文档的内置类,为了和Adobe Acrobat兼容,Foxit Reader也实现了Adobe Acrobat API中的绝大多数内容。全局变量app属于App类型,其方法activeDocs()用于返回当前活跃的文档的Doc实例,Doc的另外一个方法closeDoc()用于关闭文档并从内存中销毁相应的对象。Adobe Acrobat API文档中没有限制mailForm()参数的类型,但可以参考开源的PDFium的代码:

Foxit Reader多个UAF漏洞解析

Foxit Reader多个UAF漏洞解析

第二个参数在存在的情况下会被强制转化为字符串类型,结合PoC可以推知转化的过程会调用v1.prototype.toString(),而这个函数被赋值为f(),运行时会销毁当前Doc对象,而销毁后某些代码又会继续引用Doc对象中的属性,从而形成UAF漏洞。实际运行时情况也的确如此,程序会崩溃在0x00B8D5C9的位置上(9.0.1.1049版本):

Foxit Reader多个UAF漏洞解析

Foxit Reader多个UAF漏洞解析

edi中存储着当前Doc对象的指针,这里程序调用了Doc对象内部0x5C偏移处的另一个对象的一个虚函数,因为该虚表指针早已被销毁并填充进了其他数据,从而触发Access violation崩溃。从测试情况来看,可以很容易的控制并填充Doc对象的内存区域,从而控制eip,实现任意代码执行。

0×03 CVE-2018-3939

这次的崩溃PoC和CVE-2018-3924长得很像:

function main() {

var a = {};

a.toString = f;

app.activeDocs[0].createTemplate(false,a);

}

function f() {

app.activeDocs[0].closeDoc();

}

main();

明显可以看出问题很类似,只不过有漏洞的代码在另一个函数里面罢了。运行后崩溃的位置也很相似:

Foxit Reader多个UAF漏洞解析

Foxit Reader多个UAF漏洞解析

又是通过调用Doc对象偏移0x5C的对象的虚函数来触发UAF。

0×04 修补

责任编辑:CQITer新闻报料:400-888-8888   本站原创,未经授权不得转载
继续阅读
热新闻
推荐
关于我们联系我们免责声明隐私政策 友情链接