借助Mojo IPC 的 UAF 漏洞逃逸 Chrome 浏览器沙箱
发布时间:2022-07-12 14:37:43 所属栏目:安全 来源:互联网
导读:0x01 分析背景 我的目标是使不熟悉Chrome浏览器开发的人可以看懂这个帖子,因此,我将从了解Chrome的安全架构和IPC设计开始。请注意,此部分的所有内容也适用于基于Chromium的Edge,默认情况下已于2020年1月15日发布。 Chrome 架构 Chrome安全体系结构的关键
0x01 分析背景 我的目标是使不熟悉Chrome浏览器开发的人可以看懂这个帖子,因此,我将从了解Chrome的安全架构和IPC设计开始。请注意,此部分的所有内容也适用于基于Chromium的Edge,默认情况下已于2020年1月15日发布。 Chrome 架构 Chrome安全体系结构的关键支柱是沙箱。Chrome将网络的大部分攻击面(例如DOM渲染,脚本执行,媒体解码等)限制为沙盒进程。有一个中央进程,称为浏览器进程,它不在沙盒中运行。这个图表,显示了每个进程中的攻击面以及它们之间的各种通信通道。 我将要研究的漏洞允许受损的渲染器进程逃逸沙箱。 Mojo IPC Chrome进程通过两种IPC机制相互通信:旧版IPC和Mojo。旧版IPC即将淘汰,支持Mojo,并且与该bug的讨论无关,因此我仅关注Mojo。 引用Mojo文档,Mojo是运行时库的集合,这些运行时库提供了与平台无关的通用IPC原语抽象,消息IDL格式以及具有用于多种目标语言的代码生成功能的绑定库,以方便跨任意进程间和进程内边界传递方便的消息。 漏洞代码的Mojo接口定义: 复制 // Represents a system application related to a particular web app. // See: https://www.w3.org/TR/appmanifest/#dfn-application-object struct RelatedApplication { string platform; // TODO(mgiuca): Change to url.mojom.Url (requires changing // WebRelatedApplication as well). string? url; string? id; string? version; }; // Mojo service for the getInstalledRelatedApps implementation. // The browser process implements this service and receives calls from // renderers to resolve calls to navigator.getInstalledRelatedApps(). interface InstalledAppProvider { // Filters |relatedApps|, keeping only those which are both installed on the // user's system, and related to the web origin of the requesting page. // Also appends the app version to the filtered apps. FilterInstalledApps(array related_apps, url.mojom.Url manifest_url) => (array installed_apps); }; 在Chrome构建过程中,此接口定义将转换为每种目标语言(例如C ++,Java甚至JavaScript)的接口和代理对象。这个特定的接口最初仅在使用Java Mojo绑定的Android上实现,但是最近对Windows的支持在C ++中实现。我的利用将使用JavaScript绑定(在受损的渲染器进程中运行)调用此C ++实现(在浏览器进程中运行)。 · A是通过 MessagePipe发送Mojo消息的通道。消息包括方法调用及其回复。 · A Remote · A PendingReceiver · A SelfOwnedReceiver 关于Mojo,还有很多其他可以说的,但是对于这篇文章来说,这是没有必要的。有关更多详细信息,建议你浏览docs。 https://chromium.googlesource.com/chromium/src.git/+/master/mojo/README.md RenderFrameHost和Frame-Bound 渲染器进程中的每个框架(例如主框架或iframe)都由浏览器进程中的RenderFrameHost来支持。请注意,一个渲染器进程可能包含多个帧,前提是它们都来自同一原点。浏览器提供的许多Mojo界面都是通过RenderFrameHost获取的。 (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |