GMTC全球大前端技术大会(北京站)门票9折特惠截至本周五,点击立减¥480 了解详情
写点什么

Firefox 现安全漏洞,Mozilla 发布紧急更新

2020 年 4 月 09 日

Firefox 现安全漏洞,Mozilla 发布紧急更新

近日,Mozilla 发现了一个安全漏洞,并于 4 月 3 日发布了 Firefox 74.0.1 以修复该漏洞,该漏洞涉及到了 Firefox 普通版和长期支持版(ESR),所以有理由推测这个漏洞在 2019 年发布 Firefox 68 ESR 时就已经存在其中了。


紧急发布更新

几天前,Mozilla 为 Firefox 浏览器推出了新的版本 Firefox 74.0.1,以修补可能被利用的安全漏洞。普通版 Firefox 需要从 74.0 更新到 74.0.1,如果是 Firefox ESR 版本的用户,需要从 68.6.0 更新到 68.6.1。Tor 浏览器也随之发布了新版本,需要从 9.0.7 升级至 9.0.8。


目前,Mozilla 并没有公布有关于该安全漏洞的详细信息,包括何时发现该漏洞,攻击者会如何利用该漏洞进行攻击,目前为止因此漏洞被攻击的人数有多少等等,Mozilla 只提到了一点:



值得注意的是,这两个漏洞 Mozilla 都提示发现了相关针对性的在野利用攻击,在漏洞被利用时极可能为 0day 状态。根据奇安信的分析来看,该漏洞主要是通过诱导用户点击存有安全隐患的页面从而获取用户电脑的控制权。



图片来源于奇安信


什么是 Use-after-free 漏洞

Use-after-free 漏洞,也称为 UAF 漏洞,即释放后重用。


大致原理就是:申请出一个堆块保存在一个指针中,在释放后却没有将该指针清空,形成了一个悬挂指针,而后再申请出堆块时会将刚刚释放出的堆块申请出来,并复写其内容,而悬挂的指针此时仍可以使用,结果出现了不可控的情况,而攻击者就是利用这个漏洞控制函数指针,进而劫持程序执行流。


攻击者可以利用 UAF 漏洞对用户造成一些任意内存的修改,可能会造成任意内存的读取,可能会读取用户的 cookie 或是页面请求被修改,严重的能够造成任意命令的执行,获得 shell,而造成的影响还是要取决于被释放的指针是怎么使用的。


如何避免 UAF 漏洞

早在 2018 年 12 月,Mozila 发布的 Firefox 64 就曾出现过一个与 select 元素有关的 UAF 漏洞问题,漏洞名称为 CVE-2018-18492。去年 3 月,Google 也曾披露两个漏洞,其中 Chrome 的漏洞名称为 CVE-2019-5786,还有一个存在于 Microsoft Windows 中。去年 10 月,WhatsApp 也出现了 UAF 漏洞,名称为 CVE-2019-11932。


UAF 漏洞虽然不易造成过于严重的后果,但想要完全解决这个问题也并非易事,那么如何解决这个问题呢?Tarjei Mandt 在他的论文中提到了解决方案,大致如下:


Windows 系统中有一个名为 IoCompletionReserve 的对象,大小为 0x60,可以通过 NtAllocateReserveObject 申请出来,需要做的是:


  1. 首先申请 0x10000 个该对象并将指针保存下来;

  2. 然后再申请 0x5000 个对象,将指针保存下来;

  3. 第二步中的 0x5000 个对象,每隔一个对象释放一个对象;


原理在于通过第一步的操作将现有的空余堆块都申请出来,而第二步中申请的堆块都应是连续的,再通过第三步的操作,使用户申请 Use-after-free 结构体前面没有空闲的堆块,因此在释放的时候不会合并,再分配的时候基本上不会出现意外。


Tarjei Mandt 的论文《Kernel Pool Exploitation on Windows 7》:


https://media.blackhat.com/bh-dc-11/Mandt/BlackHat_DC_2011_Mandt_kernelpool-wp.pdf


延伸阅读:


https://www.mozilla.org/en-US/security/advisories/mfsa2020-11/#CVE-2020-6819


2020 年 4 月 09 日 13:591732
用户头像
李俊辰 InfoQ编辑

发布了 227 篇内容, 共 58.7 次阅读, 收获喜欢 253 次。

关注

评论

发布
暂无评论
发现更多内容

战略懒惰有多可怕

Neco.W

创业 重新理解创业 初创公司

JVM源码分析之Object.wait/notify实现

猿灯塔

JVM

我画了35张图就是为了让你深入 AQS

一枝花算不算浪漫

AQS jdk源码

识别代码中的坏味道(一)

Page

Java 面向对象 重构

“我XXXX,还能学编程吗?”

三号无名指

编程 工具 入门 转行程序员

Redis实现热卖商品排行榜

北漂码农有话说

redis

当你不被尊重的时候,才会想起去尊重别人

小天同学

人生 个人成长 感悟

不要做软件开发团队中打破窗户的那个人

程序员小岑

程序员 思考 感悟 软件开发 团队

Web3极客日报#141

谢锐 | Frozen

区块链 独立开发者 技术社区 Rebase Web3 Daily

Web3极客日报#129

谢锐 | Frozen

区块链 独立开发者 技术社区 Rebase Web3 Daily

工作原则:决策要基于数据的支撑

Janenesome

高效工作 思考 原则

《零基础学 Java》 FAQ 之 5-如何在IntelliJ IDEA里配置JDK

臧萌

Java jdk intellij

《零基础学 Java》 FAQ 之 6-Java里Bean这个名字怎么来的

臧萌

Java spring

LeetCode 513. Find Bottom Left Tree Value

liu_liu

LeetCode

修改网桥默认地址

奔跑的菜鸟

Docker

MySQL安全-审计

一个有志气的DB

安全 MySQ

Binlog2sql恢复误删除的数据

一个有志气的DB

MySQL 安全 数据

程序员小白的个人思考

程序员小岑

程序员 职场 思考 感悟

玄铁重剑,我用过最贵重的键盘

池建强

ipad 苹果 键盘

VSCode 集成 Haskell 环境

liu_liu

vscode haskell hie Haskell Language Server

克服恐惧,勇于分享

孙苏勇

程序员 分享 工作

Leetcode 556. Next Greater Element III

隔壁小王

算法

香港科技大学与OSL海科签订无毒海洋防污技术独家授权协议

极客编

看完这篇,你也是字符编码大神(ASCII、Unicode、UTF-8、UTF-16、UTF-32)

Meandni

Java 面试 Unicode utf-8 utf-16

测试开发专题:spring-boot自定义返回参数校验错误信息

测试轩

Spring Boot 测试

LeetCode 781. Rabbits in Forest

liu_liu

LeetCode

职涯思考

Kevin Z

职业 思考 工程师思维 硬件 工程师

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (八)好单元测试的特质

编程道与术

Java 编程 软件测试 TDD 单元测试

webpack入门系列之二——插件使用及热更新打包

子铭

Web

十大经典排序算法总结

淡蓝色

Java 算法 计算机基础 排序

要做医生,不要做卖药的

Janenesome

高效工作 思考 沟通

Firefox 现安全漏洞,Mozilla 发布紧急更新-InfoQ