这是一篇关于在 macOS 系统中发现的沙箱逃逸漏洞的博客文章,主要内容如下:
macOS 沙箱介绍:
- App 沙箱:大多数应用程序在 Mac AppStore 要求下运行,需有“<key>com.apple.security.app-sandbox</key><true/>”权限,沙箱限制在 dyld 初始化函数中应用,进入沙箱后文件操作受限,默认情况下沙箱化应用程序丢弃的文件会被标记为隔离,其能力在
/System/Library/Sandbox/Profiles/application.sb
规则配置文件中定义,且 fork 的子进程会继承父进程的沙箱限制,而通过LaunchService.framework
启动的进程不继承沙箱限制。 - Service 沙箱:与 App 沙箱不同,多数 Apple 的守护服务在 Service 沙箱上下文中运行,受系统位置定义的沙箱配置文件限制,进入沙箱后通常不被容器化,默认情况下丢弃的文件不会被隔离,除非手动调用相关 API。
- App 沙箱:大多数应用程序在 Mac AppStore 要求下运行,需有“<key>com.apple.security.app-sandbox</key><true/>”权限,沙箱限制在 dyld 初始化函数中应用,进入沙箱后文件操作受限,默认情况下沙箱化应用程序丢弃的文件会被标记为隔离,其能力在
攻击面:
旧的常见方式:
- 通过 LaunchService.framework 攻击:可通过系统 LaunchService 框架攻击非沙箱化应用,如利用[CVE-2021-30864]控制
Terminal.app
的$HOME
环境变量,或通过[CVE-2023-32364]利用 devfs 丢弃文件而不被隔离来绕过 App 沙箱。 - 攻击可用的 Mach 服务:通过枚举系统中的 Mach 服务来寻找可攻击的目标,大多数 XPC 服务存在于 System/User 域,而被忽视的 XPC 服务存在于 PID 域,其服务类型为“Application”,通常不会被沙箱化应用调用,例如
SystemShoveService.xpc
可用于逃逸 App 沙箱并绕过 SIP 保护,漏洞编号为 CVE-2022-26712。
- 通过 LaunchService.framework 攻击:可通过系统 LaunchService 框架攻击非沙箱化应用,如利用[CVE-2021-30864]控制
- 新的被忽视的攻击面:通过枚举系统(私有)框架中的 XPC 服务,发现所有 Service Type 为“Application”的 XPC 服务都是逃逸 App 沙箱的潜在目标,可通过丢弃不受隔离的文件或文件夹来实现逃逸,如发现了多个新的沙箱逃逸漏洞。
新漏洞及利用:
- Beta-No-CVE-1:存在于
/System/Library/PrivateFrameworks/StorageKit.framework/XPCServices/storagekitfsrunner.xpc
的 XPC 服务,可在没有任何沙箱限制的情况下启动,接受所有传入的 XPC 客户端,通过特定 XPC 方法可直接执行任意系统命令,苹果在 macOS Sonoma 14.0 发布前通过移除该漏洞服务进行了修复。 - Beta-No-CVE-2:存在于
/System/Library/PrivateFrameworks/AudioAnalyticsInternal.framework/XPCServices/AudioAnalyticsHelperService.xpc
的 XPC 服务,可在无沙箱限制下启动,通过特定 XPC 方法可压缩任意路径并创建不受隔离的 zip 文件,苹果在 macOS Sonoma 14.0 发布前通过检查客户端的特殊权限进行了修复。 - CVE-2023-27944:存在于
/System/Library/PrivateFrameworks/TrialServer.framework/XPCServices/TrialArchivingService.xpc
的 XPC 服务,进入服务沙箱但丢弃的文件不被隔离,通过特定 XPC 方法可提取存档文件而不传递隔离扩展属性,可利用[CVE-2021-30990]的技巧绕过挑战,苹果在 macOS Ventura 13.3 发布前通过检查客户端的特殊权限进行了修复。 - CVE-2023-32414:存在于
/System/Library/PrivateFrameworks/DesktopServicesPriv.framework/XPCServices/ArchiveService.xpc
的 XPC 服务,进入服务沙箱但丢弃的文件不被隔离,通过特定 XPC 方法可解压缩文件而不传递隔离扩展属性,苹果在 macOS Ventura 13.4 发布前通过检查客户端的特殊权限进行了修复。 - CVE-2023-32404:存在于
/System/Library/PrivateFrameworks/WorkflowKit.framework/XPCServices/ShortcutsFileAccessHelper.xpc
的 XPC 服务,可在无沙箱限制下启动并具有特殊的 TCC 权限,可通过特定 XPC 方法授予 XPC 客户端对任意 URL 的读写权限,苹果在 macOS Ventura 13.4 发布前通过检查客户端的特殊权限进行了修复。 - CVE-2023-41077:存在于
/System/Library/Frameworks/ImageCaptureCore.framework/XPCServices/mscamerad-xpc.xpc
的 XPC 服务,可在无沙箱限制下启动并具有特殊的 TCC 权限,可通过特定 XPC 方法读取任意文件,苹果在 macOS Sonoma 14 发布前通过添加新的检查进行了修复,之后又进行了多次补丁更新以加强安全性。 - CVE-2023-42961:存在于
/System/Library/Frameworks/Intents.framework/XPCServices/intents_helper.xpc
的 XPC 服务,可在无沙箱限制下启动,存在路径遍历问题,可通过特定 XPC 方法读取任意文件或删除任意文件路径,苹果在 macOS Sonoma 14.0 发布前通过清理 XPC 客户端的输入字符串进行了修复。 - CVE-2024-27864:存在于
/System/Library/PrivateFrameworks/DiskImages2.framework/XPCServices/diskimagescontroller.xpc
的 XPC 服务,具有特殊权限,可通过特定 XPC 方法attach DMG 文件而不进行隔离,苹果在 macOS Sonoma 14.4 发布前将验证逻辑从客户端移到了服务器端进行了修复。 - CVE-2023-42977:存在于
/System/Library/PrivateFrameworks/PowerlogCore.framework/XPCServices/PerfPowerServicesSignpostReader.xpc
的 XPC 服务,可在无沙箱限制下启动,存在路径遍历问题,可用于任意路径删除或创建任意目录,苹果在 macOS Sonoma 14.0 发布前通过清理 XPC 客户端的 UUID 字符串进行了修复。
- Beta-No-CVE-1:存在于
总结与思考:
- 总结了发现的新的攻击面和沙箱逃逸漏洞,强调了丢弃文件不被隔离可导致完全的沙箱逃逸,如绕过 Gatekeeper 等。
- 提到向苹果提交报告但被认为是预期行为而被关闭,解释了 App 沙箱和 Service 沙箱的特点及相关问题。
- 认为从 App 沙箱逃逸到 Service 沙箱相当于非沙箱环境(仅 macOS )。
- 参考资源:提供了一系列关于创建 XPC 服务等相关的参考资料。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。