cvm服务器虚拟机,macOS CVM服务器漏洞曝光

4cd87085a03621375e380500f6d66747.png

研究人员在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的设备。

2a3590973731fa5595341bdfc1a7aeef.png

CVMServer

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

caea80b58ac39248ae69d7a9e7ed793e.png

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

2a3590973731fa5595341bdfc1a7aeef.png

CVE-2021-30724漏洞

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

296474f70be24827a3aee5d933ec81c0.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 为一个大整数的方式来触发,引发越界内存访问和潜在的权限提升。

2a3590973731fa5595341bdfc1a7aeef.png

漏洞触发

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

039385e756f650d44c062b43a67a144f.png

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

fb7f7d271bb92dd6fa8348819bb5c605.png

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

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

4526f0c12fb2eb2b768f057985a02857.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所示。

371a092756a849f342189cb751c8d6ee.png

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

400b191b92d4c13563801532ac61f24e.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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值