Firefox 46 解决安全问题,改善性能

  • James Chesters
  • 大愚若智

2016 年 5 月 2 日

话题:JavaScriptLinuxAndroidMozilla语言 & 开发

Mozilla 刚刚发布了 Firefox 46,该版本修复了多个严重漏洞,并改善了 JavaScript JIT 编译器的安全性。

安全和性能改进是 Firefox 46 最大的变化。该版本共修复 10 个安全漏洞,其中有 1 个严重漏洞,4 个高危漏洞,其余 6 个为中等严重程度的漏洞。

这个严重漏洞与 Mozilla 所称的其他内存安全隐患有关,“某些情况导致的内存错误”证明了该 Bug 的存在,Mozilla 团队称,“付出足够努力”就能利用它执行任何代码。

其他高危漏洞则与Firefox for Android 有关,在这些漏洞的影响下,攻击者有可能通过移动设备的握持方向数据(Orientation data)和动作传感器推测出触屏上的操作。Mozilla 的报告认为,如果不修复这个问题可能危及用户隐私,并有可能暴露“随同用户其他活动输入的 PIN 码”。

该版本中新增了有关 JavaScript Just In Time(JIT)编译器的重要更新。在Firefox 已启用 W^X JIT 代码这篇博客中,Mozilla 软件工程师Jan de Mooij称:

几乎所有 JIT(包括 Firefox 目前使用的)都会使用 RWX(读 - 写 - 执行)权限为代码分配内存页面。JIT 通常需要修补代码(例如用于内联缓存(Inline cache)),如果内存可写,就能在不影响性能的情况下做到这一点。

然而 de Mooij 认为,这种做法会造成内存出错和安全隐患,RWX 页面的存在使得 Bug 更容易被利用。在 Firefox 46 中,JIT 代码页默认为不可写。

对于这个改动,de Mooij 也承认 W^X 并不“完美”,也不是“能解决任何安全问题的万全之策”,但依然坚信这个改动可以“让某些攻击更难实施... 只有少量(相对简短的)代码路径可以访问 RW 代码,并且可读写的时间窗更短”。

为了改善稳定性和性能,Mozilla 还在 Firefox 46 中修复了多个与WebRTC有关的问题。

针对 Android 上的 Firefox 用户,Firefox 46 也提供了一些更新。例如通知信息中列出的后台打开的标签页现在已经可以显示标签页的 URL,自动补全功能可补全默认域名,并且 Firefox 现在可以在运行时申请权限。Firefox 46 取消了对 Android for Honeycomb 的支持,并已停止支持 Firefox Sync 1.1,开始推荐用户使用火狐账号(Firefox Accounts)。

针对 Linux/GNU 用户,Firefox 46 提供了大家期待已久的针对 GNOME 和其他桌面环境的 GTK3 集成。

Firefox 46 还为开发者提供了一个名为Dominators的内存工具新视图。

Dominators 树“有助于帮您理解自己网站中为不同对象分配的‘保留大小’”,可显示保留内存最多的节点。

借此可以了解“节点内存保留大小的字节数或总占比”,“节点 Shallow 大小的字节数或总占比”,以及“节点的名称和内存地址”。

在 Firefox 47 中,Retaining Paths 窗格可以为单一节点显示 5 个最短保留路径(Retaining path),这样就可以看到阻止特定节点被垃圾回收的所有节点。开发者可以通过保留路径了解哪些对象保留了对已泄漏对象的引用。

Firefox 46 的完整改进清单可参阅发布说明

Mozilla 欢迎新人加入 Firefox 项目,InfoQ 读者可以通过多种方式为 Firefox 做贡献。各种可行方式的完整列表已发布在Mozilla 开发者网络,此外 Mozilla 还提供了一系列参与方法指南。

作者:James Chesters

阅读英文原文Firefox 46 Tackles Security Issues, Improves Performance


感谢夏雪对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们。

JavaScriptLinuxAndroidMozilla语言 & 开发