Chrome 渲染器中的对象转换到 RCE

2024-08-25 03:52

本文主要是介绍Chrome 渲染器中的对象转换到 RCE,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在本文中,我将利用CVE-2024-5830,这是 Chrome 的 JavaScript 引擎 v8 中的一个类型混淆错误,我于 2024 年 5 月将其报告为错误 342456991。该错误已在版本126.0.6478.56/57中修复。此错误允许通过一次访问恶意网站在 Chrome 的渲染器沙箱中执行远程代码执行 (RCE)。

V8 中的对象映射和映射转换

本节包含理解该漏洞所需的对象图和转换中的一些背景材料。熟悉这些内容的读者可以跳至下一节。

映射(或隐藏类)的概念对于 JavaScript 解释器来说相当基础。它表示对象的内存布局,对于优化属性访问至关重要。已经有很多好文章对这个主题进行了更详细的介绍。我特别推荐 Mathias Bynens 的“ JavaScript 引擎基础:形状和内联缓存”。

映射包含属性描述符数组 ( DescriptorArrays),其中包含有关每个属性的信息。它还包含有关对象元素及其类型的详细信息。

具有相同属性布局的对象之间可以共享映射。例如,以下对象都具有一个a类型为 (31 位整数) 的属性SMI,因此它们可以共享同一个映射。


o1 = {a : 1};
o2 = {a : 10000};  //<------ same map as o1, MapA

映射还会记录对象中的属性类型。例如,以下对象具有与和o3不同的映射,因为其属性的类型为( ),而不是:o1o2adoubleHeapNumberSMI


o3 = {a : 1.1};

当向对象添加新属性时,如果新对象布局的地图尚不存在,则会创建新的地图。


o1.b = 1; //<------ new map with SMI properties a and b

当发生这种情况时,新旧地图通过转换关联起来:


%DebugPrint(o2);
DebugPrint: 0x3a5d00049001: [JS_OBJECT_TYPE]- map: 0x3a5d00298911  [FastProperties]...- All own properties (excluding elements): {0x3a5d00002b19: [String] in ReadOnlySpace: #a: 10000 (const data field 0), location: in-object}
0x3a5d00298911: [Map] in OldSpace- map: 0x3a5d002816d9 <MetaMap (0x3a5d00281729 )>...- instance descriptors #1: 0x3a5d00049011 - transitions #1: 0x3a5d00298999 0x3a5d00002b29: [String] in ReadOnlySpace: #b: (transition to (const data field, attrs: [WEC]) @ Any) -> 0x3a5d00298999 ...

请注意,的映射o2包含到另一个映射的转换(0x3a5d00298999),这是为的新创建的映射o3


%DebugPrint(o3);
DebugPrint: 0x3a5d00048fd5: [JS_OBJECT_TYPE]- map: 0x3a5d00298999  [FastProperties]...- All own properties (excluding elements): {0x3a5d00002b19: [String] in ReadOnlySpace: #a: 1 (const data field 0), location: in-object0x3a5d00002b29: [String] in ReadOnlySpace: #b: 1 (const data field 1), location: properties[0]}
0x3a5d00298999: [Map] in OldSpace- map: 0x3a5d002816d9 <MetaMap (0x3a5d00281729 )>...- back pointer: 0x3a5d00298911 ...

o2相反, ( )的映射0x3a5d00298911作为后向指针存储在这个新映射中。一个映射可以在 中存储多个转换TransitionArray。例如,如果将另一个属性c添加到o2,则TransitionArray将包含两个转换,一个到属性b,另一个到属性c


o4 = {a : 1};
o2.c = 1;
%DebugPrint(o4);
DebugPrint: 0x2dd400049055: [JS_OBJECT_TYPE]- map: 0x2dd400298941  [FastProperties]- All own properties (excluding elements): {0x2dd400002b19: [String] in ReadOnlySpace: #a: 1 (const data field 0), location: in-object}
0x2dd400298941: [Map] in OldSpace- map: 0x2dd4002816d9 <MetaMap (0x2dd400281729 )>...- transitions #2: 0x2dd400298a35 Transition array #2:0x2dd400002b39: [String] in ReadOnlySpace: #c: (transition to (const data field, attrs: [WEC]) @ Any) -> 0x2dd400298a0d 0x2dd400002b29: [String] in ReadOnlySpace: #b: (transition to (const data field, attrs: [WEC]) @ Any) -> 0x2dd4002989c9 ...

SMI当对象中的类型字段被分配一个double(<

这篇关于Chrome 渲染器中的对象转换到 RCE的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1104464

相关文章

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

在Java中将XLS转换为XLSX的实现方案

《在Java中将XLS转换为XLSX的实现方案》在本文中,我们将探讨传统ExcelXLS格式与现代XLSX格式的结构差异,并为Java开发者提供转换方案,通过了解底层原理、性能优势及实用工具,您将掌握... 目录为什么升级XLS到XLSX值得投入?实际转换过程解析推荐技术方案对比Apache POI实现编程

Spring中管理bean对象的方式(专业级说明)

《Spring中管理bean对象的方式(专业级说明)》在Spring框架中,Bean的管理是核心功能,主要通过IoC(控制反转)容器实现,下面给大家介绍Spring中管理bean对象的方式,感兴趣的朋... 目录1.Bean的声明与注册1.1 基于XML配置1.2 基于注解(主流方式)1.3 基于Java

C++/类与对象/默认成员函数@构造函数的用法

《C++/类与对象/默认成员函数@构造函数的用法》:本文主要介绍C++/类与对象/默认成员函数@构造函数的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录名词概念默认成员函数构造函数概念函数特征显示构造函数隐式构造函数总结名词概念默认构造函数:不用传参就可以

C++类和对象之默认成员函数的使用解读

《C++类和对象之默认成员函数的使用解读》:本文主要介绍C++类和对象之默认成员函数的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、默认成员函数有哪些二、各默认成员函数详解默认构造函数析构函数拷贝构造函数拷贝赋值运算符三、默认成员函数的注意事项总结一

Python使用FFmpeg实现高效音频格式转换工具

《Python使用FFmpeg实现高效音频格式转换工具》在数字音频处理领域,音频格式转换是一项基础但至关重要的功能,本文主要为大家介绍了Python如何使用FFmpeg实现强大功能的图形化音频转换工具... 目录概述功能详解软件效果展示主界面布局转换过程截图完成提示开发步骤详解1. 环境准备2. 项目功能结

使用Python实现网页表格转换为markdown

《使用Python实现网页表格转换为markdown》在日常工作中,我们经常需要从网页上复制表格数据,并将其转换成Markdown格式,本文将使用Python编写一个网页表格转Markdown工具,需... 在日常工作中,我们经常需要从网页上复制表格数据,并将其转换成Markdown格式,以便在文档、邮件或