Mozilla火狐浏览器中的一个Use-After-Free破绽剖析 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

Mozilla火狐浏览器中的一个Use-After-Free破绽剖析

申博_安全预警 申博 84次浏览 已收录 0个评论

Mozilla 在2018年12月经由过程mfsa2018-29宣布了火狐浏览器64位的新版本,该版本修复了几个严峻的平安题目,个中包含 CVE-2018-18492,这个CVE是和select元素相干的一个use-after-free(UAF)破绽。我们之前讨论过UAF这类破绽,而且我们能够看到厂商已完成周全的庇护以尝试消弭它们。但纵然在本日,在web浏览器中发明和UAF相干的破绽也不是太稀有,所以相识这些破绽关于发明和修复这些毛病是十分重要的。这篇博客重要展示了这个CVE中UAF破绽的更多细节,以及为相识决这个破绽而宣布的补丁。

破绽触发

以下一段poc代码能够用于触发这个破绽:
Mozilla火狐浏览器中的一个Use-After-Free破绽剖析

在一个受该破绽影响版本的火狐浏览器上运转这段代码,获得以下的崩溃信息和报错信息:
Mozilla火狐浏览器中的一个Use-After-Free破绽剖析

能够发明,当对一个填满0xe5e5e5e5的内存地点解援用时,发作了读取接见争执。这个值是jemalloc用来“毒化”已开释内存的,所谓“毒化”就是为了轻易内存诊断,运用一个可辨认的形式来添补已开释内存。最好是这个用于添补的值不对应任何可接见的地点,云云能够致使,任何解援用已添补内存的尝试(比方use-after-free)都邑马上发作特定的崩溃。

存在SSTI漏洞的CMS合集

存在SSTI漏洞的CMS合集 前言 代码审计,考察的是扎扎实实的本领,CMS的漏洞的挖掘能力是衡量一个Web狗的强弱的标准,强网杯的时候,Web题目考的了一个CMS的代码审计,考察到了SSTI漏洞,菜鸡一枚的我过来汇总一下在PHP中的SSTI漏洞,忘能抛砖引玉,引起读者的共鸣。 SSTI漏洞概述 概念 SSTI(服务端模板注入)和常见Web注入的成因一样,也是服务端接收了用户的输入,将其作为 Web 应用模板内容的一部分,在进行目标编译渲染的过程中,执行了用户插入的恶意内容,因而可能导致了敏感信息泄露、代码执行、GetShell 等问

泉源剖析

Poc代码包含6行,我们一行一行来剖析:

  1. 建立一个div元素
  2. 建立一个option元素
  3. 这个option元素被附加到div元素,如今该div元素是option元素的父元素
  4. 为该div元素增添一个事宜监听器 DOMNodeRemoved,这意味着假如删除了这个option节点,就会挪用我们放在这里的函数。
  5. 建立一个select元素
    这里深入剖析一下,在JavaScript言语,当建立一个select元素时,xul.dll!NS_NewHTMLSelectElement函数会为这个select元素分派一个0x118字节大小的对象:
    Mozilla火狐浏览器中的一个Use-After-Free破绽剖析
    能够看到,在末了跳转到了mozilla::dom::HTMLSelectElement::HTMLSelectElement函数实行,该函数内容以下
    Mozilla火狐浏览器中的一个Use-After-Free破绽剖析
    这个函数对新分派对象的各个字段进行了初始化,另外,还建立了一个0x38字节大小的另一个对象,该对象范例为HTMLOptionsCollection。默许情况下,每个select元素都邑有一个options鸠合。再来看末了一行。
  6. 第二步建立的option元素被挪动到了select元素的options鸠合中。该操纵会致使mozilla::dom::HTMLOptionsCollection::IndexedSetter函数被挪用。下图是在IDA中看到的顺序逻辑:
    Mozilla火狐浏览器中的一个Use-After-Free破绽剖析
    这里浏览器会做一些搜检,比方,假如option的索引大于当前option鸠合的长度,options鸠合会挪用mozilla::dom::HTMLSelectElement::SetLength函数来扩展鸠合。在上面的poc中,第六行设置的是[0],所以索引值为0。在上图的蓝色块部份实行了一个搜检,假如要设置的索引不等于option鸠合的计数,则实行右分支。我们poc中索引值为0,option鸠合的计数也为0,所以会实行左分支,因而实行到了nsINode::ReplaceOrInsertBefore函数,能够在下图的赤色块地区看到:
    Mozilla火狐浏览器中的一个Use-After-Free破绽剖析
    在 nsINode::ReplaceOrInsertBefore函数中,挪用了nsContentUtils::MaybeFireNodeRemoved函数来关照要被删除对象的父亲对象,假如存在对该事宜的监听:
    Mozilla火狐浏览器中的一个Use-After-Free破绽剖析
    我们在第4行设置了对div元素的DOMNodeRemoved事宜监听器,因而这里的函数会被触发。在这个函数里,起首sel变量值会被设置为0,这将删除对select元素的末了一个援用。以后,该函数建立了一个庞大的数组缓冲区,这个操纵会发作内存压力,致使渣滓接纳顺序最先事情。此时,select元素对象会被开释因为其如今不存在任何的援用,这块开释的内存会被添补0xe5e5e5e5。末了,函数挪用alert来革新挂起的异步使命,在nsContentUtils::MaybeFireNodeRemoved函数返回时,被开释的select对象会被用来读取一个指针,从而致使读取接见争执:
    Mozilla火狐浏览器中的一个Use-After-Free破绽剖析
    风趣的是,假如实行的是右分支,照样会挪用完全相同的函数(nsINode::ReplaceOrInsertBefore),然则在挪用之前,AddRef函数会被挪用以增添select对象的援用计数,因而,不会涌现use-after-free的题目:
    Mozilla火狐浏览器中的一个Use-After-Free破绽剖析

补丁

Mozilla经由过程d4f3e119ae841008c1be59e72ee0a058e3803cf3修复了该破绽。重要变化是options鸠合中对select元素对象的弱援用被替代为了强援用:
Mozilla火狐浏览器中的一个Use-After-Free破绽剖析

总结

只管UAF破绽是一种尽人皆知的题目,然则关于大多数浏览器来讲,它仍然是一个题目,就在几个月前,针对谷歌Chrome的进击就运用了UAF破绽。固然,UAF破绽也存在与浏览器以外。Linux内核宣布了一个补丁来处理由UAF破绽引发的拒绝服务题目。相识UAF破绽怎样发作时检测他们的症结,与缓冲区溢出破绽相似,我们不太可能在软件中看到UAF破绽的闭幕,然则,恰当的编码范例和平安开辟实践能够协助我们消弭或至少是减小将来UAF破绽发作的影响。

原文链接:
https://www.zerodayinitiative.com/blog/2019/7/1/the-left-branch-less-travelled-a-story-of-a-mozilla-firefox-use-after-free-vulnerability


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明Mozilla火狐浏览器中的一个Use-After-Free破绽剖析
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址