首页 >> 网络安全 >>漏洞利用 >> CVE-2019-8697:通过磁盘管理升级MACOS系统
详细内容

CVE-2019-8697:通过磁盘管理升级MACOS系统

最近,ZDI程序在别名为ccpwd的研究人员的名为diskmanagementd的macOS守护程序中获得了基于堆的缓冲区溢出。diskmanagementd是一项负责管理和分区驱动器的服务。用户可以与之交互的一种方式是通过“磁盘工具”。它运行一个Mach服务器,允许通过进程间通信(IPC)进行通信,其中客户端使用Mach IPC接口发送和接收消息。通过这种RPC机制,客户端可以在Mach服务器中执行使用Mach接口生成器(MIG)生成的功能,该接口基本上是Apple的RPC存根生成器。


所有的通信基本通过的launchd,MACOS的执行初始化。可以通过在/System/Library/LaunchDaemons/com.apple.diskmanagementd.plist中检查其信息属性列表文件来获取该过程的更多详细信息。


首先,守护进程分配一个回调函数,该函数将在将来在任何进程间通信期间通过发送和接收Mach消息来调用。

1.png

图1-将函数sub_10000C241分配为回调

在这里,CFMachPortCreateWithPort在获得其在0x10000BE1F的接收权后,将函数sub_10000C241分配为回调以处理在Mach端口上接收的消息。根据msgh_id(在Mach消息中发送的值)来传达操作或功能ID,sub_10000C241间接使用该ID作为 两个主要远程功能的分派表的索引。sub_100001DA2和sub_100002005分别负责发起和拆除后续的通信会话。

2.png

图2-设置端口权限

马赫端口是单向的,这意味着每个发送/接收请求将需要其自己的端口。苹果将其描述为:

“端口是请求服务的客户端与提供服务的服务器之间的单向通信通道的端点。如果要提供对此类服务请求的答复,则必须使用第二个端口。这相当于UNIX中的(单向)管道。”

3.png

图3-msgh_id用作位于off_1001AB6E0的调度表中的索引

在  sub_10000CCA9,这是从可达sub_100001DA2,另一个马赫端口与回调函数创建  sub_10000DACC并保存在与键“通讯科,F2TPort”一本字典。为响应Mach消息分配了一个0x1000字节的缓冲区,该缓冲区保存在“ Comms-F2T-replyarea”键下。

4.png

图4-已分配答复缓冲区并创建了mach端口

调用setObject:forKey:将键值对添加到字典中。

5.png

图5-将端口和答复缓冲区的键值对添加到字典

当客户端发送消息时,sub_10000DACC被触发,并且基于msgh_id可以访问多个MIG远程过程调用。我们将专注于sub_1000087C9。

6.png

图6-通过mig_reply_setup设置应答缓冲区并调用RPC调度程序

缓冲区溢出发生在sub_1000087C9函数中,其中用户输入最终在回复缓冲区中。在长度上完成的一些算术最终以大于0x1000的偏移量结束。

7.png

图7-长度上的算法会产生较大的偏移

图6中的0x1000答复缓冲区基本上是r14,用户输入从r14的偏移量0x38开始,因此留下0xfc8字节供用户输入。输入达到时0xfc8,strlen将返回相同的值。经过一些算术运算后,最终值将为0xfcc [ ((0xfc8 + 1) + 3) & 0xfffffffc]。在address处0x100008ABD,偏移量变为0x1004 [0xfcc+0x38]允许泄漏4个字节并写入4个字节的偏移量,使其成为可利用的可靠基元。由于大小为0x1000,并且写入发生在0x1004,因此泄漏可能并不明显。这意味着正在从下一个块读取4个字节。


这里有两个限制。输入内容不得包含NULL字符,因为这将导致strlen在该位置停止。另一个限制是,越过缓冲区末尾写入的数据将始终是的内容var_DC,即所返回的错误代码sub_100085B30。

8.png

结论

分析这些类型的错误总是很有趣,因为它表明了一个细微的错误如何导致漏洞,最终导致在目标系统上执行代码。苹果使用2019年7月22日发布的macOS Mojave 10.14.5 修复了此错误(以及许多其他错误)。根据他们的评论,他们“通过改进内存处理”解决了该漏洞。有趣的是,苹果列出了磁盘管理组件和此CVE的模糊“安全性”组件,“安全性”部分已在macOS Sierra 10.12.6和macOS High Sierra 10.13.6上进行了修补。无论如何,看到易受攻击的代码得到纠正总是很高兴的。

技术支持: 建站ABC | 管理登录