1. Multiple new macOS sandbox escape vulnerabilities (jhftss.github.io)
macOS沙箱逃逸漏洞研究摘要
概述
本文介绍了在macOS系统中发现的多个沙箱逃逸漏洞(CVE-2023-27944、CVE-2023-32414、CVE-2023-32404、CVE-2023-41077、CVE-2023-42961、CVE-2024-27864、CVE-2023-42977等)。这些漏洞源于一个被广泛忽视的攻击面:存在于PID域中的XPC服务。攻击者利用这些漏洞,可以从受限的沙箱环境逃逸,获得未授权的系统访问权限。
macOS沙箱类型
- 应用沙箱:Mac App Store应用强制使用,限制严格。进程被容器化,所有文件操作限于其数据容器。由沙箱创建的文件默认带有
com.apple.quarantine扩展属性,且沙箱内应用无法移除该属性。 - 服务沙箱:苹果守护进程服务使用,限制相对宽松。文件默认不被标记为隔离。
核心攻击面:PID域的XPC服务
- 被忽视的攻击面:传统研究关注系统/用户域的XPC服务。作者发现,存在于PID域的XPC服务(其“Service Type”为“Application”)是一个重大攻击面。
- 关键特性:
- 这些服务通常随应用框架加载而自动注册到应用的PID域。
- 它们通常没有对传入的XPC客户端进行充分的权限或沙箱检查。
- 利用方法:通过加载特定的私有框架(例如
[[NSBundle bundleWithPath:@“/path/to/framework”] load]),可以将XPC服务注册到当前进程的PID域,随后即可与之通信。
漏洞详情与利用
Beta-No-CVE-1 (storagekitfsrunner.xpc)
- 问题:该XPC服务接受所有客户端,并暴露一个可执行任意系统命令的方法。
- 利用:加载
StorageKit.framework,通过XPC方法runTask:arguments:withReply:执行如touch /tmp/sbx的命令。 - 修复:macOS Sonoma 14.0前,苹果完全移除了该XPC服务。
CVE-2023-32414 (ArchiveService.xpc)
- 问题:该XPC服务在解压文件时,未将隔离属性传递到解压后的内容。
- 利用:加载
DesktopServicesPriv.framework,通过XPC方法unarchiveItemWithURLWrapper:...解压一个载荷应用(.app)到指定目录,解压出的应用不会带隔离标记,可直接启动。 - 修复:macOS Ventura 13.4中,增加了对XPC客户端的权限检查。
CVE-2023-32404 (ShortcutsFileAccessHelper.xpc)
- 问题:该XPC服务无沙箱限制,且拥有完全磁盘访问(FDA) 的TCC权限。它允许客户端为任意URL获取读写权限的沙箱扩展令牌。
- 利用:加载
WorkflowKit.framework,通过XPC方法extendAccessToURL:completion:获取目标文件的访问令牌,从而突破沙箱和TCC限制读取任意文件。 - 修复:macOS Ventura 13.4中,增加了对XPC客户端的权限检查。
CVE-2023-41077 (mscamerad-xpc.xpc)
- 问题:该XPC服务无沙箱限制,并拥有访问照片和可移动卷的TCC权限。通过模拟一个摄像头设备,可以读取任意文件。
- 利用:加载
ImageCaptureCore.framework,挂载一个按特定规则命名的DMG镜像以模拟相机设备,随后通过XPC方法requestReadDataFromObjectHandle:options:withReply:读取任意文件。 - 修复与绕过:苹果进行了多次修复。
- 补丁1:允许平台二进制文件连接,但被轻易绕过(通过
DYLD_INSERT_LIBRARIES注入)。 - 补丁2:要求平台二进制文件具有
CS_REQUIRE_LV等代码签名标志,但仍可通过运行时APIcsops设置标志来绕过。 - 最终修复 (macOS Sequoia 15):仅允许具有特定私有权限(
com.apple.private.imagecapturecore.authorization_bypass)的客户端连接。
- 补丁1:允许平台二进制文件连接,但被轻易绕过(通过
CVE-2023-42961 (intents_helper.xpc)
- 问题:存在路径遍历漏洞。XPC方法
purgeImageWithIdentifier:completion:和retrieveImageWithIdentifier:completion:中的文件名参数未经充分过滤。 - 利用:加载
Intents.framework,通过purgeImageWithIdentifier:方法传入如“../../../../../../etc/hosts”的路径,可删除或读取任意文件(限.png扩展名)。 - 修复:macOS Sonoma 14.0中,对输入字符串进行了清理,移除了路径遍历字符。
- 问题:存在路径遍历漏洞。XPC方法
CVE-2024-27864 (diskimagescontroller.xpc)
- 问题:XPC服务在挂载DMG镜像时,权限检查函数
checkAttachEntitlementWithError总是返回TRUE,且客户端代码中的隔离检查可被绕过。 - 利用:加载
DiskImages2.framework,自定义XPC客户端,调用attachWithParams:reply:方法挂载一个被隔离的DMG镜像,但挂载后的卷不会被标记为隔离,从而可以执行其中未受隔离保护的恶意应用。 - 修复:macOS Sonoma 14.4中,将验证逻辑从客户端移至服务端,由服务端直接对被隔离的文件对应的设备进行隔离标记。
- 问题:XPC服务在挂载DMG镜像时,权限检查函数
CVE-2023-42977 (PerfPowerServicesSignpostReader.xpc)
- 问题:XPC方法
submitSignpostDataWithConfig:withReply:中的TagUUID参数存在路径遍历漏洞,可用于创建任意目录或删除任意路径。 - 利用:加载
PowerlogCore.framework,通过XPC方法创建一个不带隔离属性的.app目录结构,并利用符号链接和环境变量技术启动恶意载荷,实现完全沙箱逃逸。 - 修复:macOS Sonoma 14.0中,对UUID字符串进行了验证,确保其格式有效。
- 问题:XPC方法
总结与要点
- 关键攻击面:系统私有框架中,注册在PID域的XPC服务是一个被严重忽视的攻击面,它们通常缺乏适当的客户端验证。
- 核心逃逸原理:能够创建不带隔离属性的文件或文件夹,等同于完全的沙箱逃逸。攻击者利用此类漏洞(如解压漏洞、目录创建漏洞)来放置并启动一个不受沙箱限制的恶意应用。
- 影响:这些漏洞允许攻击者在已获得应用远程代码执行权限后,突破沙箱限制,访问用户数据和系统资源。部分漏洞(如CVE-2023-32404, CVE-2023-41077)还能直接绕过TCC保护。
- 修复模式:苹果主要通过两种方式修复:a) 为XPC服务添加严格的客户端权限/权限检查;b) 直接移除存在风险的XPC服务或框架。
- 持续风险:作者指出仍有多个报告在处理中,并暗示该攻击面存在更多潜在漏洞。