2018年6月5日/ Patrick Biernat, Markus Gaasedelen, Nick Burnett
原文链接:http://blog.ret2.io/2018/06/05/pwn2own-2018-exploit-development/
Pwn2Own是趋势科技旗下的Zero Day Initiative每年组织的行业级安全竞赛。Pwn2Own邀请顶级安全研究人员展示对高价值软件(如最新版本的Web浏览器,操作系统和虚拟化解决方案)的0day 攻击。
今年第一次参加比赛,我们很有兴趣,我们选择了运行在 MAC OS的 Safari 浏览器作为攻击对象,因为我们此前并未尝试过这个平台上的这款软件。
为了这次比赛,我们发现并利用了Apple软件中之前两个未被披露的漏洞,以实现通过在Safari网页浏览器内点击一次就可以root身份实现远程代码执行。
来自ZDI的Joshua Smith正在评估我们在Pwn2Own 2018提交的0day
Pwn2Own 要求我们以一种非常公开的方式来评估这些高价值的目标,作为此次比赛的延伸,我们为此写了一系列博文,以详细介绍这些利用方法。
每篇文章都会对利用开发周期的关键点作坦诚的介绍。
1. 概述,目标选择,发现的漏洞
2. JSC Fuzzer 和根源分析
3. 将JSC漏洞用于RCE攻击
4. 评估Safari沙盒,对 WindiowsServer进行Fuzz
5. 实现Safari沙盒逃逸
web浏览器是人们探索外部网络的窗口,随着人们对网络需求的增加,浏览器为了保持相关性变得越来越复杂。软件出现漏洞不可避免,一些bug甚至会引发严重的安全问题。
现在的浏览器中,DOM和JavaScript引擎是黑客攻击的主要目标,研究几个最近的浏览器漏洞,发现确实如此。案列:(1,2,3,4,5, …)
其中以Safari浏览器中的JS引擎:JavaScriptCore,最引入入胜:
Safari网页浏览器是对一款开源浏览器引擎:WebKit的一个包装
JavaScriptCore(JSC)让人着迷的地方在于JS脚本可以在引擎的执行环境中执行复杂的操作,JS允许浏览器终端用户在上下文中高效地执行任意计算。通常,JS会将动态的客户端行为添加到静态的HTML网页中。
这种模式让今天的浏览器厂商很难在回退到我们知道和使用的网页之外进行限制。作为攻击者,我们的目标就是打破这种执行环境的限制。
就Pwn2Own而言,我们感兴趣的是那些可以快速被发现的bug,它们的生命周期也更短。参考了一些开源项目后,我们构建了一个分布式的fuzzing,它以覆盖率为导向,并基于JS语法。
经过大约两周的fuzzing,评估覆盖率,改进JS语法以及排除一些不太有用的crash外,我们的fuzzer生成了一个有着相当有趣的栈回溯的测试用例:
你的栈回溯里面有WTFCrashWithSecurityImplication(...)说明可能会有好事发生
对一个最简测试用例进行根源分析后,我们发现 array.reverse()和 Riptide 之间存在竞态条件,而Riptide是JSC新的并发垃圾回收器。
在合理场景下,对array.reverse()进行适时的调用将生成一个JSArray,其中包含了分散在各处的已释放对象。在这个条件竞争中的稳定胜出为我们带来了一个独特而强大的原语:任意JS对象的UAF。
这个漏洞后来被Apple 修复为CVE-2018-4192:
我们在Pwn2Own 2018上利用的JSC静态条件漏洞的CVE细节
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2018-6-13 08:22
被cherrir编辑
,原因: