V8-Exploit-Level8

zhaojunqi Lv2

V8 Exploit Level8

level8:

一.分析patch文件

更改边界检查消除条件

二.利用思路

patch文件中删除了边界检查消除相关节点并将消除条件index_type.Max()<length_type.Min()改为index_type.Min()<length_type.Min(),可借助此漏洞通过构造对象,并且index的范围使其满足边界检查消除条件,进而通过数组越界读写来修改数组对象的length域,进而通过数组的越界读写构造addressof和fakeobj原语,最终实现任意代码执行。

三.exp

核心代码如下图所示(根据patch中修改边界检查消除的条件来改写数组长度)

修改corrupted_arr数组的长度

首先构造opt函数,通过执行100000次触发TURBOFAN编译,在训练时传入参数0,不进行越界读写,但是由于index i的范围为: [0, 0x0fff_ffff],而数组长度length的范围为[1,1]所以满足满足index_type.Min() < length_type.Min()(即0<1)因此消除了数组的边界检查,因此再将opt的参数传入一个大于1的数,即可实现越界读写,根据调试出来的偏移量,可知当越界写fixed_size_arr[6]时,即为修改corrupt_arr的length域,因此实现了对corrupted_arr数组长度的修改。

任意代码执行

接着可根据addressof原语和fakeobj原语构造任意地址读写原语,有了任意地址读写原语以及addressof原语,即可用level2中的方法实现任意代码执行。

结语

level8的核心是根据修改了的数组边界检查消除条件来构造数组边界检查消除以实现越界读写,进而根据Heap Fengshui实现修改数组长度的效果,进而根据以往的经验实现任意代码执行。有问题欢迎和我多多交流。

  • Title: V8-Exploit-Level8
  • Author: zhaojunqi
  • Created at : 2024-12-11 21:35:34
  • Updated at : 2025-10-17 17:31:02
  • Link: https://redefine.ohevan.com/2024/12/11/V8-Exploit-Level8/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments