手机上怎么买彩票双色球 微信上有人推荐买彩票 能合买彩票的平台 夫妻买彩票狂中30亿 买彩票心态 买彩票就买大乐透开奖结果 哪个平台买彩票安全吗 买彩票有买一个号的吗 怎么看走势图买彩票 如何在电脑上买彩票 美国几岁可以买彩票? 福彩工作人员买彩票 彩客网买彩票 能在微信上买彩票吗 怎么买彩票容易中

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

来源:本站整理 作者:佚名 时间:2019-07-08 TAG: 我要投稿

每个匆忙的周末,都需要一道轻腻的回锅肉,来充实一下自己的莫名躁动!今天,我们就来带大家重新咂摸一下一个经典的DOM UAF漏洞!来
重新分析一个经典的DOM UAF漏洞案例:Firefox浏览器HTMLSelectElement Use-After-Free漏洞,2018年12月,Mozilla通过mfsa2018-29 发布了Firefox 64版本,该版本最初是由Nils发现并报告的。这个版本修复了几个安全问题,其中包括CVE-2018-18492,这是一个与select属性相关的?#22836;?#21518;重用(use-after-free, UAF)漏洞。我?#20405;?#21069;已经讨论过UAF 漏洞,并且我们已经看到供应商已采取措施,试图彻底消除这个漏洞。不过,即使这样,在Web浏览器中发现与UAF相关的漏洞并不罕见,因此了解它们对于发现和修复这些漏洞至关重要。在这篇文章中,我向你揭露一些关于这个特定UAF漏?#21254;?#21450;为解决这个漏洞而发布的补丁的更多细节。
漏洞的触发过程
下面的概念证明可以用来触发这个漏洞:

在受影响的Firefox版本上运行这个概念验证,可以得到以下?#35272;:投?#26632;跟踪:

正如你所看到的,取消引用填充0xe5e5e5e5的内存地址时会产生读取访问冲突。这是jemalloc用来毒化已?#22836;?#20869;存的值。所谓“毒化”,我们的意思是?#27599;?#35782;别的模?#25945;?#20805;已?#22836;?#30340;内存,以便进行漏洞诊断。最好,填充模式?#27426;?#24212;于可访问的地址,因此任何尝试取消引用从填充的存储器加载的值都将导致立即?#35272;#?#20363;如,在?#22836;?#21518;重用的情况下 。
根本原因分析
PoC由6行组成,让我?#20405;?#34892;分解:
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?#28023;篟eplaceOrInsertBefore函数中,执行对nsContentUtils?#28023;篗aybeFireNodeRemoved函数的调用,如果父级函数正在侦听这样的事件,则会通知父级函数删除子函数。

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

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

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

[1] [2]  下一页

  • 最新更新
    • 相关阅读
      • 本类?#35753;?/li>
        • 最近下载
        购买彩票权威网址
        手机上怎么买彩票双色球 微信上有人推荐买彩票 能合买彩票的平台 夫妻买彩票狂中30亿 买彩票心态 买彩票就买大乐透开奖结果 哪个平台买彩票安全吗 买彩票有买一个号的吗 怎么看走势图买彩票 如何在电脑上买彩票 美国几岁可以买彩票? 福彩工作人员买彩票 彩客网买彩票 能在微信上买彩票吗 怎么买彩票容易中
        1.16公牛vs骑士直播 传奇霸业37官网 最新版天天酷跑下载 柏林赫塔里斯本 喜乐彩基本走势图 四川时时彩走势图开奖结果 新皇冠体育 狗狗币行情走图 崩坏3怎么抽取幸运锦鲤 西班牙帕尔马