cve-2023-3079漏洞与patch分析

news2024/11/23 16:32:02

POC

function set(arr, key, val) {
    arr[key] = val;
}
function leak_hole() {
    for(let i = 0; i < 10; i++) {
        set(arguments, "foo", 1);
    }

    set(new Array(), 0, 1);
    set(arguments, 0, 1);
    return arguments[1];
}
%DebugPrint(leak_hole());

分析

通过对此漏洞的patch分析可知,此漏洞主要是由于没有检查传入的receiver是否是arguments对象并对其做特殊处理导致的:
输入图片说明
当在循环执行到第9次时将会触发内联缓调用(前八次都将是no_feedback)AccessorAssembler::KeyedStoreIC(const StoreICParameters* p)函数,由于第一次触发IC所有会进入miss分支,此分支会进入Runtime_KeyedStoreIC_Miss函数:
输入图片说明
Runtime_KeyedStoreIC_Miss函数中会调用KeyedStoreIC::Store以此来获取Store操作对应的StoreHandler对象,此对象中保存着具体用于从receiver获取属性内容的code:
输入图片说明
输入图片说明
KeyedStoreIC::Store函数开始就将会进入漏洞的主要触发流程,在第九次执行set(arguments, "foo", 1);时由于key是属性name类型会直接在调用完StoreIC::Store函数后结束:
输入图片说明
在执行set(new Array(), 0, 1);时会与前一个处理过的arguments对象相同,由于receiver与key都不同所以将会触发miss分支,并调用KeyedStoreIC::Store函数,与上一行代码不同的是set(new Array(), 0, 1);key不是一个属性name类型,而是一个元素索引类型,所以KeyedStoreIC::Store函数会先执行到以下位置:
输入图片说明
此处主要用于获取is_argumentsold_receiver_mapkey_is_valid_indestore_mode几个变量,其中store_mode比较重要,因为在生成StoreHandle时会根据它来选择具体的存储代码,由于此处处理的是array所以is_argumentsis_proxy都将会是false,而key是0也是一个有效的index,所以此处会通过GetStoreMode来获取具体的存储模式:
输入图片说明
存储模式主要有四种,根据poc来分析漏洞的话可知此处我们需要STORE_AND_GROW_HANDLE_COW模式,此模式是一个可扩展的存储模式,由于可扩展模式没有比较严格的边界检查所以会导致之后的问题,想要得到这种模式,要满足四个条件:

  • receiver是一个JSArray对象
  • 必须得是越界访问
  • 当前索引必须小于JSArray最大索引数
  • 数组元素必须连续,也就是说必须是PACKED_ELEMENTS类型的数组

之后将会去调用UpdateElements函数,UpdateElements函数会先初始化一个target_maps_and_handlers列表,通过调试可知这个列表的内容与feedback反馈槽中保存的内容是一至的,通过名称可知这个列表里主要保存map与handler:
输入图片说明
输入图片说明
map通过执行lambda表达式通过map的过渡树向上遍历map转换关系得到更新后的map,而handler则是通过反馈网络对象获取:
输入图片说明
获取完target_maps_and_handlers后会对单态会用直接用StoreElementHandler函数去获取StoreHandler,如果不满足单态那就用多态的处理函数StoreElementPolymorphicHandlers去获取StoreHandler,此处会进入多态处理函数:
输入图片说明
StoreElementPolymorphicHandlers函数会遍历处理target_maps_and_handlers列表中的每一个map与handler,并且会根据当前map是否具有过渡map来进入不同分支,此处列表中的两个map都不存在过渡,所以会直接去执行StoreElementHandler函数,StoreElementHandler函数中会根据store_mode来获取具体的code,而store_mode在前面已经提到过是通过当前正在处理的对象,也就是Array对象获取到的STORE_AND_GROW_HANDLE_COW,所以在遍历中无论是处理Arguments map还是处理Array map都是用STORE_AND_GROW_HANDLE_COW模式来获取code:
输入图片说明
最后得到一个结构如下的feedback,0是arguments对象的map,1为STORE_AND_GROW_HANDLE_COW模式的code,2为Array对象的map,3同1一样也是STORE_AND_GROW_HANDLE_COW模式的code:
输入图片说明
最后在执行set(arguments, 0, 1)时由于COW(写入时拷贝)的原因当在具体向arguments对象elelments写入内容时会将elements中的内容完整的拷贝到一块新的elements中并将要写入的内容写入。最后通过arguments[1]越界读取内容时就会将hole错误的读出来导致hole泄露。
而在官方的patch中的修复方案也比较简单,当在StoreElementHandler遇到arguments map并且elements是PACKED_ELEMENTS时,直接不使用外部传入的store_mode,而是直接用标准存储模式STANDARD_STORE
输入图片说明

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ASEMI新能源专用整流桥GBU816参数,GBU816封装

编辑-Z GBU816参数描述&#xff1a; 型号&#xff1a;GBU816 最大峰值反向电压(VRRM)&#xff1a;1600V 平均整流正向电流(IF)&#xff1a;8A 正向浪涌电流(IFSM)&#xff1a;200A 工作接点温度和储存温度(TJ, Tstg)&#xff1a;-55 to 150℃ 最大热阻(RθJC)&#xff1…

融云深度参与「新加坡 GTLC 大会」,连接亚太机遇、开拓国际市场

8 月 18 日&#xff0c;由 TGO 鲲鹏会主办的新加坡 GTLC&#xff08;Global Tech Leadership Conference&#xff0c;全球技术领导力大会&#xff09;圆满收官&#xff0c;融云作为共创伙伴深度参与了大会。关注【融云全球互联网通信云】了解更多 本次大会以“Connecting Asia…

RunnerGo性能测试时如何从数据库获取数据

我们在做性能测试或者场景测试时往往需要从数据库中获取一些真实的系统数据让我们配置的场景更加贴合实际。而RunnerGo也是在最近的大版本更新中推出连接数据库功能&#xff0c;本篇文章也给大家讲解一下具体的操作方法和实际应用场景。 配置数据库 首先进入RunnerGo页面&…

Java实现excel表数据的批量存储(结合easyexcel插件)

场景&#xff1a;加哥最近在做项目时&#xff0c;苦于系统自身并未提供数据批量导入的功能还不能自行添加上该功能&#xff0c;且自身不想手动一条一条将数据录入系统。随后&#xff0c;自己使用JDBC连接数据库、使用EasyExcel插件读取表格并将数据按照业务逻辑批量插入数据库完…

芯片行业入行小知识,快速学习!

进入芯片行业是一个充满挑战但又充满机会的领域。无论是作为工程师、设计师、销售人员还是管理者&#xff0c;以下是一些有关芯片行业入行的小知识。 1、什么是IC 集成电路的英文简称叫IC&#xff0c;IC即integrated circuit。如果有人和你说他做的是IT行业&#xff0c;那么你…

数字孪生能为教育事业带来什么新变化?

随着科技的飞速发展&#xff0c;数字孪生作为一种创新性技术&#xff0c;正在逐渐在各个领域展现出巨大的潜力。其中&#xff0c;教育领域也开始积极探索数字孪生的应用&#xff0c;为学习和教育带来了新的可能性和改变。在教育中&#xff0c;数字孪生可以用于创造具有真实性的…

Me-and-My-Girlfriend靶场

靶机下载&#xff1a; https://www.vulnhub.com/entry/me-and-my-girlfriend-1,409/ 一、信息收集 查找ip nmap -sP 192.168.16.0/24获取详细端口等信息 nmap -sV -sC -A -p 1-65535 192.168.16.209目录扫描 gobuster dir -u http://192.168.16.209 -w /usr/share/word…

无脑入门pytorch系列(五)—— nn.Dropout

本系列教程适用于没有任何pytorch的同学&#xff08;简单的python语法还是要的&#xff09;&#xff0c;从代码的表层出发挖掘代码的深层含义&#xff0c;理解具体的意思和内涵。pytorch的很多函数看着非常简单&#xff0c;但是其中包含了很多内容&#xff0c;不了解其中的意思…

Seaborn数据可视化(三)

1.绘制直方图 使用displot()绘制直方图。 import seaborn as sns import numpy as np import matplotlib.pyplot as plt# 生成随机数据 np.random.seed(0) data np.random.randn(1000)# 使用displot绘制直方图 sns.displot(data, bins10, kdeTrue)# 展示图形 plt.show() 结…

山西电力市场日前价格预测【2023-08-23】

日前价格预测 预测明日&#xff08;2023-08-23&#xff09;山西电力市场全天平均日前电价为327.31元/MWh。其中&#xff0c;最高日前电价为363.47元/MWh&#xff0c;预计出现在19: 45。最低日前电价为283.86元/MWh&#xff0c;预计出现在03: 30。 价差方向预测 1&#xff1a; 实…

mysql Left Join on条件 where条件的用法区别

数据准备 SELECT t1.id,t1.name,t2.local FROM t1 LEFT JOIN t2 ON t1.idt2.id; 执行结果 SELECT t1.id,t1.name,t2.local FROM t1 LEFT JOIN t2 ON t1.idt2.id and t2.localbeijing; SELECT t1.id,t1.name,t2.local FROM t1 LEFT JOIN t2 ON t1.idt2.id where t2.localbeijing…

微服务之光:探索代码质量的新维度

在当今的软件开发领域&#xff0c;微服务架构已经成为了一种主流的设计模式。但随着其带来的灵活性和可扩展性&#xff0c;也带来了一系列的挑战&#xff0c;尤其是在代码质量管理方面。本文将深入探讨如何在微服务架构中确保代码的质量&#xff0c;并提供一些实践策略和工具。…

Docker容器与虚拟化技术:Docker consul 实现服务注册与发现

目录 一、理论 1.Docker consul 二、实验 1.consul部署 2. consul-template部署 三、总结 一、理论 1.Docker consul &#xff08;1&#xff09;服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的&#xff0c;不保障高可用性&…

系统架构设计师之缓存技术:Redis与Memcache能力比较

系统架构设计师之缓存技术&#xff1a;Redis与Memcache能力比较

中国算力大会丨看看中兴新支点国产系统如何提升算力

近日&#xff0c;由工业和信息化部、宁夏回族自治区人民政府共同主办的2023中国算力&#xff08;基础设施&#xff09;大会在宁夏银川拉开帷幕&#xff0c;为期三天的“算力中国”创新成果展精彩亮相。中兴新支点国产操作系统的亮相&#xff0c;引起现场众多嘉宾前来了解。 “中…

Android类加载机制

要说Android的类加载机制 &#xff0c;就离不开 类加载器ClassLoader&#xff0c;它是一个抽象接口 下面这个图还是比较好表达了类加载流程&#xff0c;但如果不看我红色画的线&#xff0c;就会感觉有点乱&#xff0c;需要注意是采用的是双亲委派模式&#xff0c;class加载要先…

​Softing dataFEED OPC Suite——助力数字孪生技术发展

一 行业概览 数字孪生技术是充分利用物理模型、传感器更新、运行历史等数据&#xff0c;集成多学科、多物理量、多尺度、多概率的仿真过程&#xff0c;在虚拟空间中完成映射&#xff0c;从而反映相对应的实体装备的全生命周期过程。数字孪生技术已经应用在众多领域&#xff1a…

[C++] string类常用接口的模拟实现

文章目录 1、前言2、遍历2.1 operator[ ]下标方式2.2 迭代器2.3 范围for2.4 c_str 3、容量相关3.1 size&#xff08;大小&#xff09;3.2 capacity&#xff08;容量&#xff09;3.3 empty&#xff08;判空&#xff09;3.4 clear&#xff08;清理&#xff09;3.5 reserve3.6 res…

ZooKeeper各服务器角色介绍

1 Leader Leader服务器是整个ZooKeeper集群工作机制中的核心&#xff0c;其主要工作有以下两个。 事务请求的唯一调度和处理者&#xff0c;保证集群事务处理的顺序性。 集群内部各服务器的调度者。 请求处理链 使用责任链模式来处理每一个客户端请求是ZooKeeper的一大特色。…

如何制作gif动态图片?多图片转gif的简单方法

看到网上各种各样的表情包&#xff0c;自己也想试试&#xff0c;怎么将多张图片进行gif合成&#xff08;https://www.gif.cn&#xff09;呢&#xff1f;可以在线生成gif动图的方法&#xff0c;打开浏览器就可以完成gif图片制作&#xff0c;下面是具体步骤。 打开网站&#xff…