macOS CVM服务器漏洞曝光 - 嘶吼 RoarTalk – 回归最本质的信息安全,互联网安全新媒体,4hou.com

macOS CVM服务器漏洞曝光

ang010ela 漏洞 2021-06-12 09:30:00
收藏

导语:​研究人员在macOS、iOS和iPadOS的CVM服务器中发现1个安全漏洞。

研究人员在macOS、iOS和iPadOS的CVM服务器中发现1个安全漏洞。

研究人员在CVM服务器(Core Virtual Machine Server,核心虚拟机服务器)中发现一个安全漏洞,漏洞CVE编号为CVE-2021-30724,攻击者利用该漏洞可以进行权限提升。受影响的设备包括运行macOS Big Sur 11.4、iOS 14.6和 iPadOS 14.6的设备。

CVMServer

CVMServer是XPC服务和以root运行的处理XPC请求的系统daemon。XPC是苹果实现的负责不同进程之间通信的低级通信机制。客户端通过XPC相关的API来发送XPC请求消息。然后,服务器会接收消息并处理。其中最常使用的客户端是用OpenCL框架编写的。其主要逻辑是使用switch结构来处理不同类型的XPC消息。图1是CVMServer switch结构逻辑的示例:

 fig 1 switch case logic of the cvmserver.png

图1. CVMServer switch结构处理消息逻辑示例

CVE-2021-30724漏洞

该问题存在于XPC请求消息处理器中,具体来说是使用OpenCL源码来处理请求(case msgType=18)构造元素的过程中。

 fig 2 case 18 logic where the vulnerability exists.png

图2. CVMServer Case 18 逻辑

图2是存在漏洞的逻辑,item[3*count]是映射长度,会从xpc_shmem_map返回。同时,beginOffset是由XPC请求消息控制的(135行)。如果item[3*count]的值小于beginOffset,那么根据case 18的逻辑,remainLen的值就会出现整数溢出。引发144行的检查被绕过。因此,该漏洞可以通过指定item[count]=accessDataLen 为一个大整数的方式来触发,引发越界内存访问和潜在的权限提升。

漏洞触发

如图1所示,flag context->attached是在case 4中设置的。也就是说,要发送请求(case msgType=18),CVMS服务必须被附加,而且XPC请求msgType=4也要被发送。要发送XPC请求给服务,首先要建立连接。通过搜索到API调用_xpc_connection_create_mach_service的交叉引用,研究人员发现了一个名为com.apple.cvmsServ的服务,然后就可以建立了连接。

 image.png

然后,就可以附加上服务和通过调试获得的参数。

 image.png

在添加了CVMS服务和发送XPC请求msgType=4后,就可以发送请求存在漏洞的请求(case msgType=18)。为更好地帮助大家理解,研究人员给出了XPC消息结构图,如图3所示。

从97到105行,可以看到request[“source”]是一个XPC数组,其中保存了源码数据列表。第108行,每个数组项被分配了32字节的数据。

image.png

图3. source_data_array布局

111行到156行的do-while循环用每个数据源值填充了数组项。数据源值的类型是xpc_type_data或xpc_type_shmem。这里的逻辑表明地址范围[accessBeginPointer, accessBeginPointer+accessDataLength)必须是[mappedBaseAddress, mappedBaseAddress+mappedLength)的子集。然后会检查accessDataLength值是否小于mappedLength减去beginOffset值。要触发该漏洞就必须要绕过该检查。这些值都可以通过XPC请求消息来控制。

在第138行,有一个beginOffset值的检查,必须小于4k。但是从xpc_shmem_map 返回的mappedLength一般会被设置为4k。这就触发了该漏洞。

然后就可以绕过通过整数溢出的方式来绕过144行的检查,即通过指定大数值的方式触发越界内存访问。触发代码如图5所示。

image.png 

图4. MappedLength被修改为更小的值

image.png

图5. 漏洞触发代码

完整PoC参见GitHub:https://gist.github.com/jhftss/1bdb0f8340bfd56f7f645c080e094a8b

本文翻译自:https://www.trendmicro.com/en_us/research/21/f/CVE-2021-30724_CVMServer_Vulnerability_in_macOS_and_iOS.html如若转载,请注明原文地址
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论