安全黑客
当前位置:安全黑客文章资讯安全资讯安全新闻
日期:2018-12-03 23:12:00  来源:本站整理

如何利用QuartzCore堆溢出实现iOS/macOS Safari沙盒逃逸[安全新闻]

赞助商链接



  本文“如何利用QuartzCore堆溢出实现iOS/macOS Safari沙盒逃逸[安全新闻]”是由安全黑客为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

一、漏洞概要
QuartzCore(即CoreAnimation)是macOS及iOS用来构建动画场景图的一个框架。CoreAnimation使用了一个独特的渲染模型,以独立进程来运行图形操作。在macOS上,该进程为WindowServer,在iOS上,该进程为backboardd。这些进程都在沙盒外,能够调用setuid。QuartzCore服务名通常也称为CARenderServer。macOS和iOS上都存在该服务,并且可以从Safari沙盒中访问,因此经常用于各种Pwn2Own场合中。该服务中存在一个整数溢出bug,导致最新的macOS/iOS上的QuartzCore存在堆溢出漏洞。
受影响的操作系统
macOS 10.14
iOS 12.10
 
二、厂商回复
“CoreAnimation漏洞影响:应用程序可能使用系统权限来执行任意代码。已改进内存处理方式,修复该内存破坏问题。“
该漏洞编号为CVE-2018-4415。
 
三、漏洞细节
该漏洞的根源位于QuartzCore的CA::Render::InterpolatedFunction::InterpolatedFunction函数中,该函数并没有考虑到整数溢出问题。下面我们会在macOS以及iOS系统上详细介绍这个漏洞细节。
macOS 10.14
在macOS上,有个API(CGSCreateLayerContext)可以用来打开CARenderService(iOS上不存在该API)。攻击者可以向服务端口发送id为0x9C42或者0x9C43的消息。当进程(实际上为server_thread)收到这个特定的消息时,会进入类似反序列化的一个过程。只要提供适当的数据,执行流程将进入CA::Render::InterpolatedFunction::InterpolatedFunction函数中。

在上图中,请注意攻击者可以控制(a)以及(b)处这两个成员的值(CA使用类似CA::Render::Decoder::decode*之类的函数来反序列化对象),在CA::Render::InterpolatedFunction::allocate_storage函数中,函数会根据这些值来决定待分配的内存的大小。

在(d)处,v3由(a)以及(b)处的值来控制,而(e)处的v4同样由攻击者可控的(c)来控制。因此待分配的内存大小为4 * (v4 + v3)。然而仔细观察(f),传递给CA::Render::Decoder::decode_bytes函数的第3个参数实际上为4 * v3。(f)处CA::Render::Decoder::decode_bytes简化后的形式类似于memcpy(v2, v8, 4 * v3)或者memset(v2, 0, 4 * v3)。因此,当4 * (v4 + v3)溢出而4 * v3没有溢出时,就会出现堆溢出问题。大家可以在本文后面的漏洞利用中,观察如何利用攻击者可控的这些值来触发整数溢出问题。
大家可以通过如下步骤,在macOS上复现这个问题:
1、clang QuartzCoreFunctionIntOverFlow.c -oquartz_core_function_over_flow -framework CoreGraphics
2、./quartz_core_function_over_flow
1 Thread 0 Crashed:: Dispatch queue: com.apple.main−thread
com.apple.CoreFoundation 0x00007fff332e2daf __CFBasicHashAddValue + 2077
com.apple.CoreFoundation 0x00007fff332e33f5 CFDictionarySetValue + 187
com.apple.SkyLight 0x00007fff595ebfa9 CGXPostPortNotification + 123
com.apple.SkyLight 0x00007fff595eb947 notify_handler + 73
com.apple.SkyLight 0x00007fff595eb2d9 post_port_data + 237
com.apple.SkyLight 0x00007fff595eafba run_one_server_pass + 949
com.apple.SkyLight 0x00007fff595eab90 CGXRunOneServicesPass + 460
com.apple.SkyLight 0x00007fff595eb820 server_loop + 96
com.apple.SkyLight 0x00007fff595eb7b5 SLXServer + 1153
WindowServer 0x000000010011d4c4 0x10011c000 + 5316
libdyld.dylib 0x00007fff6036ced5 start + 1
Thread 2:: com.apple.coreanimation.render−server // CARenderServer thread
libsystem_platform.dylib 0x00007fff6056ce09 _platform_bzero$VARIANT$Haswell
+ 41
com.apple.QuartzCore 0x00007fff3e8ebaa4 CA::Render::Decoder::
decode_bytes(void*, unsigned long) + 46
com.apple.QuartzCore 0x00007fff3e8c35f7 CA::Render::InterpolatedFunction
::InterpolatedFunction(CA::Render::Decoder*) + 191
com.apple.QuartzCore 0x00007fff3e8c3524 CA::Render::Function::decode(CA
::Render::Decoder*) + 224
com.apple.QuartzCore 0x00007fff3e8ecb8a CA::Render::Decoder::
decode_object(CA::Render::Type) + 946
com.apple.QuartzCore 0x00007fff3e8edc8e CA::Render::decode_commands(CA::
Render::Decoder*) + 871
com.apple.QuartzCore 0x00007fff3e896422 CA::Render::Server::
ReceivedMessage::run_command_stream() + 748
com.apple.QuartzCore 0x00007fff3e73d2e1 CA::Render::Server::
server_thread(void*) + 1841
com.apple.QuartzCore 0x00007fff3e91427c thread_fun(void*) + 25
libsystem_pthread.dylib 0x00007fff60572795 _pthread_body + 159
libsystem_pthread.dylib 0x00007fff605726e2 _pthread_start + 70
libsystem_pthread.dylib 0x00007fff605722a9 thread_start + 13
iOS 12.10
由于这个问题的原因非常清楚,并且iOS和macOS上的代码基本一致,因此在这部分内容中,我们只讨论iOS和macOS上的一些不同点。
1、iOS上不存在类似CGSCreateLayerContext之类的API,不能直接获取CoreAnimation渲染上下文,但经过一番探索后,我们发现可以使用_XRegisterClient这个MIG函数来替代CGSCreateLayerContext。首先,攻击者需要打开com.apple.CARenderServer服务(可以在沙盒中访问该服务),然后调用通过mach_msg发送id为40202的消息来调用_XRegisterClient;

[1] [2] [3]  下一页


  以上是“如何利用QuartzCore堆溢出实现iOS/macOS Safari沙盒逃逸[安全新闻]”的内容,如果你对以上该文章内容感兴趣,你可以看看安全黑客为您推荐以下文章:
  • 如何利用QuartzCore堆溢出实现iOS/macOS Safari沙盒逃逸
  • 本文地址: 与您的QQ/BBS好友分享!

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    免责条款 - 广告合作 - 下载声明 - 欢迎投稿 - 友情连接 - 网站地图 -
    Copyright © 2012-2013 www.110hack.com. All Rights Reserved .