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

相关文章

Java对象转换的实现方式汇总

《Java对象转换的实现方式汇总》:本文主要介绍Java对象转换的多种实现方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java对象转换的多种实现方式1. 手动映射(Manual Mapping)2. Builder模式3. 工具类辅助映

python实现svg图片转换为png和gif

《python实现svg图片转换为png和gif》这篇文章主要为大家详细介绍了python如何实现将svg图片格式转换为png和gif,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录python实现svg图片转换为png和gifpython实现图片格式之间的相互转换延展:基于Py

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim

Python实现AVIF图片与其他图片格式间的批量转换

《Python实现AVIF图片与其他图片格式间的批量转换》这篇文章主要为大家详细介绍了如何使用Pillow库实现AVIF与其他格式的相互转换,即将AVIF转换为常见的格式,比如JPG或PNG,需要的小... 目录环境配置1.将单个 AVIF 图片转换为 JPG 和 PNG2.批量转换目录下所有 AVIF 图

详解如何通过Python批量转换图片为PDF

《详解如何通过Python批量转换图片为PDF》:本文主要介绍如何基于Python+Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下... 目录1. 概述2. 功能亮点2.1 主要功能2.2 界面设计3. 使用指南3.1 运行环境3.2 使用步骤4. 核

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义