深入解析Firefox中的JavaScript进程间通信:攻击与防御

本文详细探讨了Firefox中JavaScript进程间通信(IPC)的实现机制,包括JSActors和MessageManager两种模式,并通过实际案例CVE-2019-11708分析安全漏洞的成因与修复方式,提供调试技巧和安全审计方法。

深入解析Firefox中的JavaScript进程间通信:攻击与防御

Firefox使用进程间通信(IPC)来实现权限分离,这是其安全架构的重要基石。之前的博客文章主要关注了IPC的C++端模糊测试,而本文将探讨JavaScript中的IPC,它被用于用户界面的各个部分。首先,我们将简要回顾多进程架构以及即将到来的Project Fission变化,这是Firefox实现站点隔离的方案。然后,我们将研究两种不同的JavaScript IPC模式,并解释如何调用它们。使用Firefox的开发者工具(DevTools),我们将能够调试浏览器本身。

掌握这些知识后,我们将重新审视一个沙箱逃逸漏洞,该漏洞在2019年被用于针对Coinbase的0day攻击,并报告为CVE-2019-11708。这个0day漏洞在博客文章和公开可用的漏洞利用中得到了广泛覆盖。我们认为这个漏洞提供了一个很好的案例研究,其底层技术将有助于识别类似问题。最终,通过发现更多沙箱逃逸漏洞,您可以帮助保护数亿Firefox用户,作为Firefox漏洞赏金计划的一部分。

多进程架构的现在与未来

截至2021年4月,Firefox使用一个特权进程来启动其他进程类型并协调活动。这些类型包括Web内容进程、半特权Web内容进程(用于特殊网站如accounts.firefox.com或addons.mozilla.org)以及四种实用进程,用于Web扩展、GPU操作、网络或媒体解码。在这里,我们将重点关注主进程(也称为“父进程”)与多个Web进程(或“内容”进程)之间的通信。

Firefox正在转向新的安全架构以实现站点隔离,从“每个标签页一个进程”转向“每个站点一个进程”架构。

左:当前Firefox通常将标签页分组到自己的进程中。右:启用Fission的Firefox,将每个站点分离到自己的进程中。

父进程充当代理和可信用户界面主机。某些功能,如我们的设置页面about:preferences,本质上是托管在父进程中的网页(使用HTML和JavaScript)。此外,各种控制功能,如模态对话框、表单自动填充或本机用户界面部分(例如,