-
-
[原创]CVE-2016-7200分析
-
发表于:
2017-11-20 21:34
6445
-
标签(空格分隔): Chakra
其中左值为0x0000000200000001
,右值为0x8000000280000002
value实际指向ArraySegment,其中length=3,size=6,元素为1、2、3
对应于poc中定义的dummy
会调用Array.prototype.filter()
filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。
对于chakra来说这个函数实现在JavascriptArray::FilterHelper
函数中,大体逻辑如下
代码的逻辑很容易理解,首先从源Array中依次取出元素,再根据用户callback进行判断,如果满足条件就置入新的Array中,否则会被丢弃。
这里的newArr的创建操作如下
注意虽然进行了转换,但是最后newArr却是NativeIntArray类型
观察接下来的取值和赋值操作可以发现问题
pArr的类型为JavascriptArray
newArr的类型为JavascriptNativeIntArray
这里直接从pArr中取出值放入了newArr,很明显是一个类型混淆
造成这个混淆的根本原因是设置了static get [Symbol.species]() { return dummy; }
导致返回了一个JavascriptNativeIntArray,从而与JavascriptArray造成混淆。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课