IT学习网 - 爱学习 - 最具影响力综合资讯网站 -- 中国IT界的领航者!
热门关键字:      88888  as  xxx
站外
广告
站外
广告

Three roads lead to Rome

发布时间:2016-12-02 21:39文章来源:互联网文章作者: 佚名点击次数:
在过去的两年里一直关注于浏览器方面的研究,主要以Fuzz为主,fuzzing在用户态的漏洞挖掘中,无论是漏洞质量还是CVE产出一直效果不错。直到一些大玩家的介入,以及大量的fuzzer在互联网公开,寻找bug需要更苛刻的思路。后来Edge中使用的MemGC使fuzz方式找漏

在过去的两年里一直关注于浏览器方面的研究,主要以Fuzz为主,fuzzing在用户态的漏洞挖掘中,无论是漏洞质量还是CVE产出一直效果不错。直到一些大玩家的介入,以及大量的fuzzer在互联网公开,寻找bug需要更苛刻的思路。后来Edge中使用的MemGC使fuzz方式找漏洞更加困难,fuzz出仅有的几个能用的漏洞还总被其他人撞掉,因为大家的fuzzer是越长越像。于是今年上半年pwn2own之后开始更多的源码审计并有了些效果,起初认为存量足够了,但大概在7月份左右开始,手头的bug以每月2+的速度被撞掉(MS、ChakraCodeTeam、ZDI、Natalie、360…),本文描述的bug也是其中一个。因为这个漏洞的利用方式还是比较有趣的,经历了几次改变,值得说一下。

The Bug

var intarr = new Array(1, 2, 3, 4, 5, 6, 7)

var arr = new Array(alert)

arr.length = 24

arr.__proto__ = new Proxy({}, {getPrototypeOf:function() {return intarr}})

arr.__proto__.reverse = Array.prototype.reverse

arr.reverse()

Root Cause

出问题的代码如下:

\

有很多地方都引用了这样的逻辑,JavascriptArray::EntryReverse只是其中的一个触发路径。开发人员默认了Array的类型,认为传入ForEachOwnMissingArrayIndexOfObject

的prototype一定是Var Array,如下图:

\

当然,通常一个Array赋值为proto时,会被默认转化成Var Array,例如:

var x = {}

x.__proto__ = [1,2,3]

查看x的属性:

0:009> dqs 0000022f`c251e920 l1

0000022f`c251e920 00007ffd`5b743740 chakra!Js::JavascriptArray::`vftable’

0:009> dq poi(0000022f`c251e920+28)

0000022f`c23b40a0 00000003`00000000 00000000`00000011

0000022f`c23b40b0 00000000`00000000 00010000`11111111

0000022f`c23b40c0 00010000`22222222 00010000`33333333

0000022f`c23b40d0 80000002`80000002 80000002`80000002

但ES6中Proxy的出现使代码逻辑变得更复杂,很多假设也不见得正确了,

Proxy的原型如下

\

它可以监控很多类型的事件,换句话说,可以打断一些操作过程,并处理我们自己的逻辑,返回我们自定义的数据。

其中有这样的一个handler:

\

可以在prototype = prototype->GetPrototype();进入trap流程,进入我们自定义的JavaScript user callback中。

如果返回一个JavascriptNativeIntArray类型的Array,则会导致默认的假设不成立,从而出现各种问题。

其实不仅是JavascriptNativeIntArray类型,只要不是JavascriptArray类型的数组,

都会因为与期望不同而或多或少出现问题,比如

JavascriptNativeFloatArray

JavascriptCopyOnAccessNativeIntArray

ES5Array…

下面看看使用这种”混淆”的能力,我们能做些什么

首先重新总结下这个bug:

1.我们有两个数组,Array_A和Array_B

2.在Array_B中用Var的方式(e.GetItem())取出一个item,放入Array_A中
Three roads lead to Rome
本文由 IT学习网 整理,转载请注明“转自IT学习网”,并附上链接。
原文链接:http://www.ourlove520.com/Article/diannao/wangluo/596131.html

标签分类:

上一篇:上一篇:网络安全之溢出利用FILE结构体
下一篇: 下一篇:没有了
无觅关联推荐,快速提升流量