每个匆忙的周末,都需要一道轻腻的回锅肉来充实一下自己的莫名躁动!

本文主要是介绍每个匆忙的周末,都需要一道轻腻的回锅肉来充实一下自己的莫名躁动!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

每个匆忙的周末,都需要一道轻腻的回锅肉来充实一下自己的莫名躁动!

每个匆忙的周末,都需要一道轻腻的回锅肉,来充实一下自己的莫名躁动!今天,我们就来带大家重新咂摸一下一个经典的DOM UAF漏洞!来

重新分析一个经典的DOM UAF漏洞案例:Firefox浏览器HTMLSelectElement Use-After-Free漏洞,2018年12月,Mozilla通过mfsa2018-29 发布了Firefox 64版本,该版本最初是由Nils发现并报告的。这个版本修复了几个安全问题,其中包括CVE-2018-18492,这是一个与select属性相关的释放后重用(use-after-free, UAF)漏洞。我们之前已经讨论过UAF 漏洞,并且我们已经看到供应商已采取措施,试图彻底消除这个漏洞。不过,即使这样,在Web浏览器中发现与UAF相关的漏洞并不罕见,因此了解它们对于发现和修复这些漏洞至关重要。在这篇文章中,我向你揭露一些关于这个特定UAF漏洞以及为解决这个漏洞而发布的补丁的更多细节。

漏洞的触发过程

下面的概念证明可以用来触发这个漏洞:PHP大马

每个匆忙的周末,都需要一道轻腻的回锅肉来充实一下自己的莫名躁动!

在受影响的Firefox版本上运行这个概念验证,可以得到以下崩溃和堆栈跟踪:

每个匆忙的周末,都需要一道轻腻的回锅肉来充实一下自己的莫名躁动!

正如你所看到的,取消引用填充0xe5e5e5e5的内存地址时会产生读取访问冲突。这是jemalloc用来毒化已释放内存的值。所谓“毒化”,我们的意思是用可识别的模式填充已释放的内存,以便进行漏洞诊断。最好,填充模式不对应于可访问的地址,因此任何尝试取消引用从填充的存储器加载的值都将导致立即崩溃,例如,在释放后重用的情况下 。

根本原因分析

PoC由6行组成,让我们逐行分解:

1. 创建div属性;

2. 创建选项属性;

3. option属性被附加到div属性中,这样div现在是option属性的父级了;

4. 将DOMNodeRemoved事件侦听器添加到div属性,这意味着如果删除了option属性,我们将调用我们放在这里的函数;

5. 创建一个select属性。

当用JavaScript创建一个select属性时,函数xul.dll!NS_NewHTMLSelectElement将接收控件。它为这个select属性分配一个0x118字节的对象:奇热影视

每个匆忙的周末,都需要一道轻腻的回锅肉来充实一下自己的莫名躁动!

如你所见,最后,跳转到mozilla :: dom :: HTMLSelectElement :: HTMLSelectElement函数。

每个匆忙的周末,都需要一道轻腻的回锅肉来充实一下自己的莫名躁动!

在这个函数中,初始化新分配对象的各个字段。注意,还分配了0x38字节的另一个对象,并将其初始化为HTMLOptionsCollection对象。因此,默认情况下,每个select属性都有一个option集合。让我们看看PoC的最后一行。

6. 将步骤2中创建的option属性移动到select属性的option集合中,在JavaScript中执行此操作将导致调用mozilla :: dom :: HTMLOptionsCollection :: IndexedSetter函数(你可以看到此函数在图2中所示的堆栈跟踪中调用)。

每个匆忙的周末,都需要一道轻腻的回锅肉来充实一下自己的莫名躁动!

这里的一些检查是由浏览器完成的,例如,如果option索引大于option集合的当前长度,则通过调用mozilla :: dom :: HTMLSelectElement :: SetLength函数来扩大option集合。在我们的PoC中,由于第6行中的[0],它是零(参见图1),然后在图5中的蓝色块处进行检查。如果要设置的索引不等于option集合的option计数,则采用右分支。在我们的PoC中,所需的索引值为0,而选项计数也为0,因此采用了左分支。这样,执行就可以到达nsINode :: ReplaceOrInsertBefore函数,如下面的红色块中所示:

每个匆忙的周末,都需要一道轻腻的回锅肉来充实一下自己的莫名躁动!

在nsINode::ReplaceOrInsertBefore函数中,执行对nsContentUtils::MaybeFireNodeRemoved函数的调用,如果父级函数正在侦听这样的事件,则会通知父级函数删除子函数。

每个匆忙的周末,都需要一道轻腻的回锅肉来充实一下自己的莫名躁动!

当我们在PoC的第4行div属性上设置一个DOMNodeRemoved事件侦听器时(参见图1),我们放置在那里的函数就会被触发。在这个函数中,首先将sel变量设置为0。这将删除对select属性的最后一个引用。接下来,该函数创建了一个巨大的数组缓冲区。这会产生内存压力,导致垃圾收集器启动。此时,select 属性对象被释放,因为不再有对它的任何引用。这个释放的内存将被0xe5e5e5e5毒化。最后,该函数调用alert来刷新挂起的异步任务。从nsContentUtils::MaybeFireNodeRemoved函数返回时,释放的select对象用于读取一个指针,该指针会触发读取访问冲突。

每个匆忙的周末,都需要一道轻腻的回锅肉来充实一下自己的莫名躁动!

这里有一个有趣的发现,如果采用了右分支,将调用完全相同的函数(nsINode::ReplaceOrInsertBefore),但就在调用之前,AddRef函数将用于增加select对象的引用计数。因此,不会出现释放后重用的情况:

每个匆忙的周末,都需要一道轻腻的回锅肉来充实一下自己的莫名躁动!

补丁

Mozilla通过changeset d4f3e119ae841008c1be59e72ee0a058e3803cf3修补了这个漏洞,原理就是,option集合中对select属性的弱引用被一个强引用替换。

每个匆忙的周末,都需要一道轻腻的回锅肉来充实一下自己的莫名躁动!

总结

尽管UAF 漏洞是一个众所周知的漏洞,但对它的预防仍然需要改进。就在几个月前,针对谷歌Chrome的攻击就使用了UAF漏洞。研究人员称,此次Chrome的漏洞编号为CVE-2019-5786,受影响的系统包括微软Windows、苹果macOS和Linux系统。该漏洞存在于API FileReader中,它旨在允许web应用程序异步读取存储在用户计算机上的文件(或者原始数据缓冲区)内容。

另外,UAF也不管只发生在浏览器之外。Linux内核发布了一个补丁来解决由UAF引起的拒绝服务情况。了解UAF是如何发生的,才能方便研究人员检测出它们。与缓冲区溢出漏洞类似,我们不太可能找到预防UAF的终极答案。然而,正确的编码和安全开发可以帮助我们消除或至少减少UAF的影响。

这篇关于每个匆忙的周末,都需要一道轻腻的回锅肉来充实一下自己的莫名躁动!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

没睡够,周末补觉好不好

中国睡眠研究会调查显示,中国成年人失眠的发生率高达38.2%。此外,40%的成年人在最近一个月内出现白天打盹。中国睡眠研究会还发现,1900年以来,人们的日睡眠时间以每年0.71分钟的速度递减。即我们当前的日睡眠时间比1900年减少了1.5小时。睡不够,怎么办? 周末补觉有助健康 失眠症对生活质量的负面影响很大。失眠者中的抑郁症发病率比非失眠者高3到4倍。但调查结果显示,我国失眠患

【详细介绍一下GEE】

GEE(Google Earth Engine)是一个强大的云计算平台,它允许用户处理和分析大规模的地球科学数据集,如卫星图像、气候模型输出等。以下是对GEE用法的详细介绍: 一、平台访问与账户设置 访问GEE平台: 用户可以通过访问Google Earth Engine的官方网站来开始使用GEE。 创建账户: 用户需要注册并登录Google账户,然后申请访问GEE平台。申请过程可能需要提

Vue2电商项目(二) Home模块的开发;(还需要补充js节流和防抖的回顾链接)

文章目录 一、Home模块拆分1. 三级联动组件TypeNav2. 其余组件 二、发送请求的准备工作1. axios的二次封装2. 统一管理接口API----跨域3. nprogress进度条 三、 vuex模块开发四、TypeNav三级联动组件开发1. 动态展示三级联动数据2. 三级联动 动态背景(1)、方式一:CSS样式(2)、方式二:JS 3. 控制二三级数据隐藏与显示--绑定styl

使用WebP解决网站加载速度问题,这些细节你需要了解

说到网页的图片格式,大家最常想到的可能是JPEG、PNG,毕竟这些老牌格式陪伴我们这么多年。然而,近几年,有一个格式悄悄崭露头角,那就是WebP。很多人可能听说过,但到底它好在哪?你的网站或者项目是不是也应该用WebP呢?别着急,今天咱们就来好好聊聊WebP这个图片格式的前世今生,以及它值不值得你花时间去用。 为什么会有WebP? 你有没有遇到过这样的情况?网页加载特别慢,尤其是那

插件maven-search:Maven导入依赖时,使用插件maven-search拷贝需要的依赖的GAV

然后粘贴: <dependency>    <groupId>mysql</groupId>    <artifactId>mysql-connector-java</artifactId>    <version>8.0.26</version> </dependency>

js基础需要注意的点

1 js中单引号和双引号都能创建字符串,但是html的元素属性规定必须用双引号,所以js优先用单引号定义字符串。

作为刚从事Java开发的小白,需要掌握哪些技能

作为一个刚踏入Java开发世界的小白,面对各种技术和工具,你可能会觉得有点不知所措。但是别担心,我会给你一个简单清晰的路线图,让你可以有条不紊地掌握基本技能,逐步成长为一名Java开发者。 1. 扎实的Java基础 Java的基础是你迈向高级开发的重要基石,建议从以下几个方面着手: 语法和基础概念:比如变量、条件语句、循环、方法、数组、面向对象编程(OOP)等等。这些基础如同建房子的地基,越