首页
社区
课程
招聘
[翻译]Mozilla 2018 Pwn2Own利用细节
2018-4-23 16:18 2677

[翻译]Mozilla 2018 Pwn2Own利用细节

2018-4-23 16:18
2677

在2018 Pwn2Own 比赛中,Richard 只利用了一个bug便攻破了Mozilla Firefox浏览器,向Mozilla官方提交漏洞后,官方响应迅速,不到24小时官方便将版本做出了升级,修补了漏洞,本文将详细探讨此漏洞的一些细节。

漏洞成因

该漏洞也被ZDI-18-263收录(CVE-2018-5146),造成此次漏洞的原因是:实现Vorbis音频解码的库文件libvorbis存在越界写入漏洞。在库函数实现音频合成的过程中,漏洞仅能被使用type 1残留编码的音频文件触发,越界写入就发生在残留计算中,接下来详细看看漏洞函数vorbis_book_decodev_add():



造成该漏洞的根本原因是第407行内部for循环中数组边界检查不足(上图)。我们可以静心构造一个Vorbis音频文件,让book->dim足够大,这会使i比n大的多,然后在第408行的for循环中就能实现越界访问数组a。

在Richard构造的文件中,他把book->dim的值设置为96,n的值设置为1,这可以写入a数组并覆盖进程内存。



价值5万美元的exploit

Richard利用堆喷射技术,交错使用javascript数组和数组缓存。他利用构造的vorbis文件触发越界写入漏洞以达到重写数组长度的目的,然后自由地从受损数组中读取和写入数组缓存。接着,Richard构造了一个假的javascript对象并劫持了虚拟表,利用ROP技术实现代码执行,然后发起后续的攻击。

从受害者的角度来说,他们仅仅是浏览了网站,最后却遭到了攻击;另一方面从Richard的角度来说,他在此次Pow20Own比赛中获得了5万美元的奖金!


补丁

漏洞披露之后,官方迅速响应,给出了补丁。Xiph 小组在数组循环中增加了额外的检测功能,防止数组越界访问。该团队还删除了手动循环优化,并在其他残余编码函数中修补了类似的bug。



总结

Mozilla此次修复速度之快,特别是在漏洞本身不在其代码库中的情况下。可以在博客中了解他们是如何实现的。这个也告诉了我们浏览器巨大的攻击面,古老的第三方库可能只是黑客发起进攻的入口。

请继续关注博客,之后会有今年比赛的其他漏洞细节,你也可以在Twitter上找到我@TrendyTofu,跟随团队,获取最新的利用技术和安全补丁。


来源:https://www.zerodayinitiative.com/blog/2018/4/5/quickly-pwned-quickly-patched-details-of-the-mozilla-pwn2own-exploit

由看雪翻译小组 cherrir编译

由看雪翻译小组 Logdty校对


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回