Chrome 中的 RCE 会在 JIT 编译器中产生不正确的副作用

此类漏洞通常是“一键式”攻击的起点,当受害者访问恶意网站时,该漏洞会危害受害者的设备。Chrome 中的渲染器 RCE 允许攻击者危害 Chrome 渲染器进程并执行任意代码。但是,渲染器进程的权限有限,因此攻击者需要将此类漏洞与第二个“沙盒逃逸”漏洞串联起来:Chrome 浏览器进程中的另一个漏洞或操作系统中的漏洞,以危害 Chrome 本身或设备。例如,Google 威胁分析小组的 Clement Lecigne 在“间谍软件供应商使用 0-day 和 n -day 攻击流行平台”中发现,由渲染器 RCE(CVE-2022-3723)、Chrome 沙盒逃逸(CVE-2022-4135)和内核错误(CVE-2022-38181)组成的链条被野外利用。

虽然许多最强大、最复杂的“一键式”攻击都具有高度针对性,而普通用户可能更容易受到网络钓鱼等不太复杂的攻击,但用户仍然应该保持 Chrome 为最新版本并启用自动更新,因为一旦补丁发布,通常可以通过分析补丁来相对快速地利用 v8 中的漏洞。

当前漏洞存在于 Chrome 中的 JIT 编译器中,该编译器根据对输入类型(例如数字类型、数组类型等)的先前了解来优化 JavaScript 函数。这称为推测优化,必须小心确保在使用优化代码时,这些对输入的假设仍然有效。JIT 引擎的复杂性在过去导致了许多安全问题,并且一直是攻击者的热门目标。Samuel Groß 撰写的 phrack 文章“利用 JavaScript JIT 引擎中的逻辑错误”很好地介绍了该主题。

Chrome 中的 JIT 编译器

Chrome 的 v8 Javascript 引擎中的 JIT 编译器称为TurboFan。Chrome 中的 Javascript 函数会根据其使用频率进行优化。首次运行 Javascript 函数时,解释器会生成字节码。随着使用不同输入反复调用该函数,会收集有关这些输入的反馈,例如它们的类型(例如,它们是整数还是对象等)。在函数运行足够次数后,TurboFan 会使用此反馈为该函数编译优化代码,并根据反馈做出假设以优化字节码。此后,将使用编译后的优化代码来执行该函数。如果在优化函数后这些假设变得不正确(例如,使用了与反馈类型不同的新输入),则将取消优化该函数,并再次使用速度较慢的字节码。读者可以查阅 Benedikt Meurer 撰写的“ V8 中的推测优化简介”,了解有关编译过程如何工作的更多详细信息。

TurboFan 本身是一个研究得很好的主题,有大量文献记录了它的内部工作原理,所以我只介绍本文所需的背景知识。Jeremy Fetiveau 撰写的文章“ TurboFan 简介”是一篇很棒的文章,涵盖了 TurboFan 的基础知识,对于理解本文的背景非常有用,尽管我也会介绍必要的材料。Samuel Groß 撰写的 phrack 文章“利用 JavaScript JIT 引擎中的逻辑错误”也涵盖了 TurboFan 和 V8 对象布局的许多相关方面。

节点和副作用

在编译优化的 JIT 代码时,TurboFan 首先访问函数中的每个字节码指令,然后将这些指令中的每一个转换成节点集合(此过程称为缩减),从而得到一种称为“节点之海”的表示形式。节点通过依赖关系相互关联,这些依赖关系在Turbolizer中表示为边,Turbolizer 是一种常用于可视化节点之海的工具。边有三种类型:控制边表示控制流图,值边表示数据流图,效果边根据节点访问对象状态的方式对节点进行排序。

例如,在以下内容中:

x.a = 0x41;
var y = x.a;

操作y = x.a对 具有效果依赖性x.a = 0x41,并且必须在 之后执行,x.a = 0x41因为x.a = 0x41会改变 的状态x,该状态用于y = x.a。效果边缘对于消除优化代码中的检查非常重要。

在 Chrome 中,内存布局(特别是对象中字段的偏移量)由其指定Map,可以将其视为对象的类型信息,而MapTurboFan 经常使用反馈中的知识来优化代码。(读者可以查阅Mathias Bynens 的“JavaScript 引擎基础:形状和内联缓存”Map以了解更多详细信息。但就本文而言,知道确定对象字段偏移量就足够了。)

让我们更深入地看一下如何插入依赖性检查,并使用此函数作为运行示例:

function foo(obj) {
  var y = obj.x;
  obj.x = 1;
  return y;
}
x`当访问的字段时`obj`,TurboFan 使用 参数的先前输入`obj`来推测内存布局(由 的 确定`Map`)`obj`并发出优化的代码来访问`x`。当然,在优化后调用 时可能会使用`obj`不同的,因此在函数中创建一个节点以确保在优化代码访问该字段之前具有正确的内存布局。这可以在 Turbolizer 生成的图中看到:`Map``foo``CheckMaps``obj``x

Turbolizer 图表显示 CheckMaps 在字段加载之前插入

Turbolizer 图表显示 CheckMaps 在字段加载之前插入

同样,当将 存储到x行中时obj.x = 1,优化后的代码假定obj具有正确的映射。但是,由于 的映射obj在 之前进行了检查var y = obj.x,并且这两行之间没有任何可以更改 的内容obj,因此无需重新检查映射。实际上,TurboFan 不会在 中使用的节点CheckMaps之前生成额外的节点:StoreField``obj.x = 1

Turbolizer 图显示,在后续存储之前省略了 CheckMaps

Turbolizer 图显示,在后续存储之前省略了 CheckMaps

但是,节点有时会产生副作用,即它可能会间接改变对象。例如,调用用户定义的 JavaScript 函数的节点可能会改变任何对象:

function foo(obj) {
  var y = obj.x;
  callback();
  obj.x = 1;
  r

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/410672.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ssm基于微信小程序的付费自习室系统源码调试讲解

本项目包含程序源码数据库LW调试部署环境,文末可获取一份本项目的java源码和数据库参考。 系统的选题背景和意义 选题背景: 随着社会的发展和教育竞争的加剧,越来越多的学生和职场人士需要一个安静、舒适、专注的学习环境。然而,传…

STM32学习记录-08-USART串口

1 通信接口 通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统 通信协议:制定通信的规则,通信双方按照协议规则进行数据收发 USART:TX数据发送、RX数据接收 I2C:SCL时钟、SDA数据 SPI:SCLK时钟、MOSI主机输出、MISO主机输入、CS片选 CAN:CAN_H、CAN_L一对差分数据…

Reactor 模式的 Java 实现(feat. Scalable IO in Java - Doug Lea)

原文地址:http://hscarb.github.io/java/20240827-reactor-java.html Reactor 模式的 Java 实现(feat. Scalable IO in Java - Doug Lea) 1. 背景 Doug Lea 在 Scalable IO in Java 的 PPT 中描述了 Reactor 编程模型的思想,大…

【计算机网络】计算机网络的分层结构

为什么要分层?为什么要制定协议? 计算机网络功能复杂→采用分层结构,将诸多功能合理地划分在不同层次→对等层之间制定协议,以实现功能。

6G网络的关键技术、应用前景与挑战并存的科技征途

移动通信技术正以前所未有的速度迭代更新,而6G技术的研发与商用化进程渐渐成为了当前科技领域的热点与焦点。在5G技术尚未完全普及的今天,全球各国已纷纷将目光投向了更加充满想象的6G网络时代。本文将探讨全球6G研发的最新进展,特别是欧盟与…

javacv-ffmpeg ProcessBuilder批量旋转图片

javacv-ffmpeg ProcessBuilder实现对图片的旋转,最近需要处理很多图片,量有点多,所以不能一个一个去编辑旋转图片,所以写一个工具类,实现对图片的旋转 maven配置文件,加上对ffmpeg的依赖,由于f…

81、k8s网络配置以及k8s拉取私有仓库

一、k8s架构安装部署 k8s架构master 192.168.168.81 docker、kubeadm、kubelet、kubectl、flannel node01 192.168.168.82 docker kubeadm kubelet kubectl flannel node02 192.168.168.83 docker、kubeadm、kubelet、kubectl、flannel#关闭防火墙 [rootk8s1 ~]# sys…

EmguCV学习笔记 VB.Net 7.1 角点检测

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

【负载均衡式在线OJ】项目设计

文章目录 程序源码用到的技术项目宏观结构代码编写思路 程序源码 https://gitee.com/not-a-stupid-child/online-judge 用到的技术 C STL 标准库。Boost 准标准库(字符串切割)。cpp-httplib 第三方开源网络库。ctemplate 第三方开源前端网页渲染库。jsoncpp 第三方开源序列化…

netty编程之结合springboot一起使用

写在前面 源码 。 本文看下netty结合springboot如何使用。 1:netty server部分 server类(不要main,后续通过springboot来启动咯!): package com.dahuyou.netty.springboot.server;import io.netty.bootstrap.Serve…

Python实现t-分布随机邻域嵌入(t-SNE)降维算法

目录 Python实现t-分布随机邻域嵌入(t-SNE)降维算法的博客引言t-SNE算法原理t-SNE的优势与局限Python实现t-SNE算法1. 创建t-SNE类2. 示例场景:MNIST手写数字数据集3. 结果分析 结论运行结果 Python实现t-分布随机邻域嵌入(t-SNE&…

2024上海初中生古诗文大会备考:单选题真题和每道题独家解析

新学年开学倒计时了,也意味着上海中小学生的几项传统赛事即将拉开帷幕了。 其中,2024年初中生古诗文大会初选还有2个多月(官宣了11月3日线上初选正式开赛),我们来看10道历年的选择题真题和详细解析。为帮助孩子自测和…

模型 KT决策法

系列文章 分享 模型,了解更多👉 模型_思维模型目录。系统分析,明智选择。 1 KT决策法的应用 1.1 餐饮连锁店菜单更新 一家餐饮连锁店计划更新菜单,以吸引更多顾客并提高销售额。使用 KT 决策法(Kepner-Tregoe&#x…

xss-labs靶场通关详解(11-15关)

第11关 referer 进行抓包 添加referer:click me!" type"button" οnmοuseοver"alert(/xss/)进行放包 第12关 进行抓包 修改User Agent:click me!" type"button" οnmοuseοver"alert(/xss/)进行放包 第13关 抓包 修改C…

python可视化-密度图

1、加载数据 import pandas as pd import numpy as np from sklearn.datasets import load_iris import warnings# 禁用所有警告信息 warnings.filterwarnings(ignore)# 加载数据 iris load_iris() iris iris.keys() df pd.DataFrame(iris.data, columnsiris.feature_names)…

mac nvm安装及使用(nvm安装指定版本node npm pnpm)

mac nvm安装及使用(nvm安装指定版本node npm pnpm) 1.卸载电脑的node 打开终端:依次执行以下命令: sudo rm -rf /usr/local/bin/npm sudo rm -rf /usr/local/share/man/man1/node.1 sudo rm -rf /usr/local/lib/dtrace/node.d s…

开源word文档相似度对比 软件WinMerge

WinMerge 官网下载 :GitHub - WinMerge/winmerge: WinMerge is an Open Source differencing and merging tool for Windows. WinMerge can compare both folders and files, presenting differences in a visual text format that is easy to understand and hand…

API网关之Kong

Kong 是一个高性能的开源 API 网关和微服务管理平台,用于管理、保护和扩展 API 和微服务。它最初由 Mashape 公司开发,并于 2015 年作为开源项目发布。Kong 能够处理 API 的路由、认证、负载均衡、缓存、监控、限流等多种功能,是微服务架构中…

网络应用层之(2)DNS协议

网络应用层之(2)DNS协议 Author: Once Day Date: 2024年8月12日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 通信网络技术_Once-Day的博客-CSDN…

PyTorch深度学习网络(二:CNN)

卷积神经网络(CNN)是一种专门用于处理具有类似网格结构数据的深度学习模型,例如图像(2D网格的像素)和时间序列数据(1D网格的信号强度)。CNN在图像识别、图像分类、物体检测、语音识别等领域有着…