前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深入分析macOS CVE-2019-8507漏洞

深入分析macOS CVE-2019-8507漏洞

作者头像
FB客服
发布2019-07-22 16:23:06
7350
发布2019-07-22 16:23:06
举报
文章被收录于专栏:FreeBufFreeBufFreeBuf

0x00 写在前面的话

2019年3月25日,苹果发布了macOS Mojave 10.14.4和iOS 12.2。这两个版本修复了大量的安全漏洞,其中包括QuartzCore(即CoreAnimation)中的CVE-2019-8507。关于苹果更新的详细信息,可以参考这篇【公告】(点击底部阅读原文查看)。

在这篇文章中,我们将对macOS中的漏洞CVE-2019-8507进行详细分析。

0x01 漏洞概述

QuartzCore,也就是CoreAnimation,它是macOS和iOS用来创建动画场景的图形框架。CoreAnimation使用了一种独特的渲染模型,这种模型会以单独得进程来进行图形化操作。在macOS中,这个进程为WindowServer。在iOS中,这个进程为backboard。

QuartzCore中名为com.apple.CARenderServer的服务通常被称为CARenderServer。这个服务macOS和iOS中都有,可以直接从Safari沙盒环境中访问。但是,在macOS上,当QuartzCore在处理一个CA::Render::Decoder::decode_shape()函数中的图形对象时,就会发生内存崩溃(漏洞),这将导致应用程序意外终止运行。

下面给出的是Windows Server进程在遇到问题时的程序崩溃日志:

0x02 PoC概念验证

接下来,我将演示如何使用我们的PoC来触发该漏洞。PoC代码如下所示:

原始Mach信息跟修改后的Mach信息对比如下图所示:

通过对二进制源码进行分析后,我们发现只需要将偏移量0xB6的在一个字节由0x06修改为0x86,即可触发该漏洞。

如PoC代码所示,为了发送专门制作的Mach消息来触发该漏洞,我们首先需要发送一个msghid为40202的Mach消息,服务器中对应的处理器为XRegisterClient,然后获取每一个新连接客户端的链接ID。

当我们获取到了连接ID之后,我们就可以在特质的Mach消息中偏移量0x2C的位置设置这个值了。最后,我们只需要发送这个Mach消息就可以触发该漏洞了。

0x03 漏洞分析

接下来,我们将使用LLDB来对漏洞进行动态调试,并分析导致漏洞产生的根本原因。注意:我们需要通过SSH模式来调试WindowServer进程。

通过对崩溃日志进行分析,我们可以获取到崩溃线程的堆栈回溯信息,并使用下列命令在CA::Render::Server::ReceivedMessage::runcommandstream函数处设置断点:

conn_id的值可以通过在PoC代码的第86行设置断点来获取。

断点命中后,我们可以直接读取特制Mach消息的缓冲区数据,寄存器r13指向的就是特制的Mach消息。

函数CA::Render::Decoder::decode_object(CA::Render::Decoder *this,CA::Render::Decoder *a2)可以用来解码这种类型的对象数据。开始于偏移量0x70000907dd52处的缓冲区数据为一个图片对象(绿色高亮标记):

下面的代码段可以用来解析CA::Render::Decoder::decode_object函数中的图片对象数据:

下图显示的是函数CA::Render::Image::decode(),我添加了部分注释方便大家查看:

我们可以看到偏移量0x70000907dd52处的一个字节从0x06变为了0x86,所以变量v4现在等于0x86。接下来,程序会跳转到LABEL31来执行其他分支代码,因为变量v4已经大于0x20了。在LABEL31结尾处,程序会调用CA::Render::Texture::decode(CA::Render::Texture *this,CA::Render::Decoder *a2)函数来继续处理后续数据。

我们可以看到,它会调用函数CA::Render::Decoder::decode_shape来处理Shape对象数据。

接下来,我们看看其他的数据集是如何处理的。

我们可以看到变量v2等于0x02它可以给缓冲区分配一个8字节大小的区域。最后,它会调用函数CA::Render::Decoder::decode_bytes来解码多个字节的数据。

导致该问题存在的根本原因在于CA::Render::Decoder::decode_shape函数缺乏限制验证机制。下面我们看看苹果方面是如何修复这个漏洞的:

0x04 总结

根据苹果的安全公告,这个漏洞只会影响macOS。该问题存在于QuartzCore中,由于缺少输入验证限制,因此当QuartzCore在处理一个CA::Render::Decoder::decode_shape()函数中的图形对象时,就会触发该漏洞。通过对比补丁代码,我们可以看到苹果通过增强输入验证机制修复了该问题。

0x05 受影响版本

macOS Mojave 10.14.2macOS Mojave 10.14.3

0x06 漏洞分析环境

macOS 10.14.2 (18C54) -MacBook Pro

0x07 时间轴

披露日期:2019年1月1日 通知日期:2019年1月3日 确认日期:2019年3月20日 发布日期:2019年3月25日

0x08 参考资料

1、 https://support.apple.com/en-us/HT209600 2、 https://www.fortinet.com/blog/threat-research/detailed-analysis-of-macos-ios-vulnerability-cve-2019-6231.html

*参考来源:fortinet,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 写在前面的话
  • 0x01 漏洞概述
  • 0x02 PoC概念验证
  • 0x03 漏洞分析
  • 0x04 总结
  • 0x05 受影响版本
  • 0x06 漏洞分析环境
  • 0x07 时间轴
  • 0x08 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档