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实现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格式字符串(二)解析自定义

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

Java实现XML与JSON的互相转换详解

《Java实现XML与JSON的互相转换详解》这篇文章主要为大家详细介绍了如何使用Java实现XML与JSON的互相转换,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. XML转jsON1.1 代码目的1.2 代码实现2. JSON转XML3. JSON转XML并输出成指定的

Java实现将Markdown转换为纯文本

《Java实现将Markdown转换为纯文本》这篇文章主要为大家详细介绍了两种在Java中实现Markdown转纯文本的主流方法,文中的示例代码讲解详细,大家可以根据需求选择适合的方案... 目录方法一:使用正则表达式(轻量级方案)方法二:使用 Flexmark-Java 库(专业方案)1. 添加依赖(Ma

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3