Foxit Reader多个UAF漏洞解析 – 互联网安全新媒体平台

0×00 简介

9月28号闻名PDF涉猎器厂商福昕针对 Foxit Reader 和 Foxit PhantomPDF 宣布了例行安然更新,在其安然看护布告上涉及了此中一个包孕较多 CVE 编号的修补,此中包括了由 360 云影实验室发明并提交的 7 个 UAF 破绽。

Foxit 对此修补的描述为:“办理了一个可能让法度榜样发生Use-After-Free远程代码履行或Out-of-Bounds Read信息透露的问题,从而形成破绽和崩溃。这个问题在履行特定的JavaScript代码时呈现,当调用closeDoc函数后应用文档或其帮助工具时被触发。”

本文就简单说一下该系列破绽。

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的代码:

第二个参数在存在的环境下会被强制转化为字符串类型,结合PoC可以推知转化的历程会调用v1.prototype.toString(),而这个函数被赋值为f(),运行时会销毁当前Doc工具,而销毁后某些代码又会继承引用Doc工具中的属性,从而形成UAF破绽。实际运行时环境也切实着实如斯,法度榜样会崩溃在0x00B8D5C9的位置上(9.0.1.1049版本):

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();

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

又是经由过程调用Doc工具偏移0x5C的工具的虚函数来触发UAF。

0×04 修补

修补后的9.2.0.9297版本中这两个函数险些都被重写了但从createTemplate()函数的新版本中可以看到在转换类型前对参数类型进行了反省,假如是Object类型则不做类型转换,从而避免履行toString()措施:

也便是说按福昕的理解,问题出在参数类型过滤不严。

0×05 后续

CVE-2018-3924和CVE-2018-3939的环境显着不会是个例,于是就有了此次较多的同类问题的申报。这里有一个额外的小问题,现在网上可以找到的Adobe Acrobat API文档是2007年的,而后续版本的API又有了一些补充,关于这些变更至少本人没有找到公开的文档。以是这波申报涉及了一些2007年文档中没有的API函数。

实际去看这些后续增添的API时会发明有相称一部分函数Foxit Reader都只是做了一个空壳子,里面没有任何代码实现。可能这一部分功能福昕并不注重。后续发明有该问题的函数还有Doc类的mailDoc()措施、createIcon()措施、getPageBox()措施、gotoNamedDest()措施、importAnFDF()措施等等。

关于使用效果,在做了简单的堆喷射后在关闭DEP的情况中可以弹出谋略器:

*本文作者: ManchurianClassmate@360云影实验室,转载请注明来自 .COM。

赞(0) 打赏
分享到: 更多 (0)
免责申明:本站所有资料均来自于网络,版权归原创者所有!本站不提供任何保证,不保证真实性,并不承担任何法律责任

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

阿里云优惠网 更专业 更优惠

阿里云优惠券阿里云大礼包