加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 安全 > 正文

借助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获取的。

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读