Sploitlight: 分析基于Spotlight的macOS TCC漏洞
微软威胁情报团队发现了一个macOS漏洞,攻击者可以利用该漏洞窃取通常受透明度、同意和控制(TCC)保护的文件中的私人数据,例如Downloads文件夹中的文件,以及Apple Intelligence使用的缓存。虽然与之前的TCC绕过(如HM-Surf和powerdir)类似,但此漏洞(我们因其使用Spotlight插件而称之为“Sploitlight”)的影响更为严重,因为它能够提取和泄露由Apple Intelligence缓存的敏感信息,例如精确的地理位置数据、照片和视频元数据、人脸和人物识别数据、搜索历史记录和用户偏好等。这些风险由于iCloud账户之间的远程链接功能而进一步复杂化和加剧,这意味着攻击者如果能够访问用户的macOS设备,也可以利用该漏洞确定链接到同一iCloud账户的其他设备的远程信息。
在主动搜索具有特权授权的进程期间发现此绕过技术后,我们通过Microsoft安全漏洞研究(MSVR)的协调漏洞披露(CVD)与Apple分享了我们的发现。Apple于2025年3月31日发布的macOS Sequoia安全更新中修复了此漏洞,现标识为CVE-2025-31199。我们感谢Apple安全团队在解决此漏洞方面的合作,并鼓励macOS用户尽快应用这些安全更新。
提醒一下,TCC是一种技术,旨在防止应用程序在未获得用户事先同意和知情的情况下访问用户的个人信息,包括位置服务、摄像头、麦克风、Downloads目录等服务。应用程序获得这些服务访问权限的唯一合法方法是通过用户界面中的弹出提示获得用户批准,或在操作系统设置中授予按应用访问权限。
在这篇博客文章中,我们展示了尽管Spotlight插件受到严格和重重限制以维持其对敏感文件的特权访问,但它们仍然可以被滥用以外泄文件内容。我们的研究展示了这种特权访问以及操纵这些插件的能力如何模糊操作系统组件(如mds守护进程和mdworker任务)与非操作系统组件(如插件本身)之间的界限。此外,我们还展示了TCC绕过如何针对明确定义的文件类型工作,以及如何滥用它以获取有价值的数据,例如由Apple Intelligence标记的信息以及其他iCloud账户链接设备的远程信息。
背景:Spotlight导入器
Spotlight是macOS内置应用程序,能够通过索引快速查找设备上的内容。用户可以使用Command + Space快捷键触发文件搜索。然而,Spotlight支持称为Spotlight导入器的插件,以进一步索引设备上的数据。例如,Outlook可以索引电子邮件以便它们在搜索中出现。这些插件是以.mdimporter后缀结尾的macOS捆绑包,可以使用mdimport实用程序加上-L命令行标志列出:
图1. 典型系统上的Spotlight插件列表
为了支持该架构,该技术采用生产者-消费者设计,其中诸如Spotlight(或mdfind命令实用程序)之类的工具从本地保存的索引文件中消费数据,而索引服务则生成和更新这些索引文件。
索引服务称为mds,充当系统守护进程。在文件修改时,内核触发mds守护进程,进而创建一个严格沙盒化的任务称为mdworker,该任务运行插件逻辑并更新索引。
Spotlight插件在过去已被研究过,显著的例子包括:
- Csaba Fitzl的博客文章关于它们如何用于持久化。
- Patrick Wardle的KnockKnock实用程序,检查Spotlight导入器的持久性。
- Jonathan Levin的*OS Internals, Vol I,检查Spotlight导入器的工作原理。
Spotlight插件通过其Info.plist文件声明它们可以处理哪些类型的文件,当mds守护进程扫描此类文件时,mdworker任务最终将调用它们的GetMetadataForFile函数。
将插件转变为TCC绕过
我们过去已经覆盖了几个TCC绕过,例如CVE-2021-30970(“powerdir”)和CVE-2024-44133(“HM-Surf”)。提醒一下,TCC是一种技术,防止应用程序在未获得用户事先同意和知情的情况下访问用户的个人信息,包括位置服务、摄像头、麦克风、Downloads目录等服务。在这篇博客文章中,我们将主要关注对受TCC保护的私有文件的访问,例如Downloads目录、Pictures目录或用户的桌面。
由于Spotlight插件对敏感文件具有特权访问以进行索引,Apple通过其沙盒能力对它们施加了严格限制。在现代macOS系统上,Spotlight插件甚至不允许读取或写入除正在扫描的文件之外的任何文件。然而,我们得出结论这还不够,因为攻击者有多种方式可以外泄文件内容。在我们的漏洞利用中,我们决定简单地将文件的字节分块记录到统一日志中:
图2. 通过日志记录泄露扫描文件的内容
假设攻击者知道他们希望读取的特定文件类型,他们可以简单地执行以下步骤:
- 更改捆绑包的Info.plist和schema.xml文件,以UTI形式声明他们希望泄露的文件类型。由于我们假设攻击者在本地运行,这总是可以解决的,即使是动态类型。
- 将捆绑包复制到~/Library/Spotlight目录。注意捆绑包完全不需要签名。
- 通过mdimport -r命令强制Spotlight使用新的捆绑包,并使用mdimport -L命令验证它确实已加载。
- 使用mdimport -i <路径>递归扫描给定路径下的文件并泄露它们。注意调用应用程序不需要对索引目录的TCC权限,因为这是由mdworker任务完成的。
- 使用日志实用程序读取文件内容。
动态类型的UTI确定可以使用uttype实用程序完成,即使调用应用程序没有对正确目录的TCC访问权限。例如,这里是受TCC保护的Photos.sqlite文件的解析:
图3. 即使缺乏TCC权限,动态类型的解析
注意由于.mdimporter是一个未签名的捆绑包,攻击者甚至不需要重新编译以适应其他文件类型——他们可以根据需要修改Info.plist和schema.xml。因此,我们得出结论,攻击者可以轻松地从通常受TCC保护的敏感目录中发现和读取任意文件。我们最初的漏洞利用专注于Downloads文件夹,后来才将我们的注意力吸引到Pictures文件夹。
我们编写了一个完整的概念验证(POC)漏洞利用代码,称为“Sploitlight”,自动化了整个流程,并与Apple分享了它:
图4. 漏洞利用——注意终端没有对Photos的访问权限,但文件仍然被发现和泄露
从Apple Intelligence暴露更多敏感数据
读取敏感文件的能力比看起来更危险。事实证明,新推出的Apple Intelligence(默认安装在所有基于ARM的设备上)将其数据缓存在各种目录下。例如,其中一个目录位于用户的Pictures目录下:
图5. 由Apple Intelligence创建的索引文件
对这些文件的访问受“Pictures”TCC服务类型保护,没有用户批准无法访问。然而,正如我们之前用Sploitlight POC演示的那样,我们可以泄露任意文件的内容,从而提取这些数据库文件的内容。
有许多优秀的实用程序可以从Photos.sqlite和photos.db中提取私人信息,但我们想总结一下攻击者能够获得的信息:
数据类型 | 获取的信息 |
---|---|
精确地理位置数据 | – 与照片和视频关联的GPS坐标(纬度、经度、海拔)。 – 时间戳位置历史,可能重建用户随时间移动的轨迹。 – 反向地理编码的地址或地点名称。 |
照片和视频元数据 | – 照片和视频拍摄的时间戳。 – 设备型号、相机设置(光圈、ISO、快门速度)。 – 指向存储内容的媒体路径。 |
人脸和人物识别数据 | – 识别的人脸,有时链接到联系人姓名(如果标记)。 – 按识别个体聚类的照片。 |
用户活动和事件上下文 | – 照片相关活动,如截图、保存的图像和共享内容。 – 事件聚类(如假期、生日)。 |
照片相册和共享库 | – 用户定义的相册及其内容。 – 共享相册详细信息,包括参与者。 |
删除的照片和视频 | – 最近删除项目的元数据,可能仍存在于“最近删除”部分。 |
图像分类和对象检测 | – 由Photos应用程序生成的标签和类别(如“海滩”、“狗”、“文档”)。 |
搜索历史记录和用户偏好 | – 在Photos应用程序内的先前搜索查询。 |
图6. 从Photos.sqlite元数据中获取文件名、描述、标题、GPS位置和日期
除了攻击者获得目标用户设备上如此详细的私人信息的影响外,重要的是要记住,共享同一iCloud账户的Apple设备将具有不同的Photos.sqlite数据库文件,但人脸标记和其他元数据会在设备之间传播。这意味着能够访问用户macOS设备的攻击者也将能够确定链接到该用户iCloud账户的其他设备的远程信息,例如来自目标用户iPhone的数据。
此外,威胁行为者可以同样轻松地从其他Apple Intelligence缓存文件中获取私人数据,例如电子邮件摘要和使用ChatGPT编写的笔记。
加强针对TCC绕过攻击的保护
能够绕过macOS设备上TCC保护的攻击者可以在未经用户同意的情况下访问敏感数据。进一步从受保护目录(如Downloads文件夹和Apple Intelligence缓存)中外泄私人数据的能力尤其令人担忧,因为可以提取的信息高度敏感,包括地理位置数据、媒体元数据和用户活动。鉴于使用同一iCloud账户的设备之间存在远程链接能力,此漏洞的影响更为广泛,使攻击者能够通过链接设备确定有关用户的更多远程信息。理解TCC绕过漏洞的影响对于构建主动防御以保护用户数据免受未经授权的访问至关重要。
通过理解这些安全问题的更广泛影响,我们可以更好地防御用户并确保他们的数字安全。Microsoft Defender for Endpoint使组织能够快速发现和修复其日益异构网络中的漏洞,如Sploitlight。从这项研究中获得的见解使我们能够增强Microsoft Defender for Endpoint的检测机制,通过主动检测异常的.mdimporter捆绑包安装以及任何敏感目录的可疑索引,提供对私人数据未经授权访问的强大保护:
图7. Microsoft Defender for Endpoint检测异常Spotlight操作
通过不断改进我们的安全解决方案,我们旨在保护用户信息并维护对我们产品的信任。此外,这项研究强调了持续警惕以及与软件供应商和安全社区合作的重要性,以便在漏洞被利用之前识别和缓解它们。我们再次感谢Apple安全团队在修复CVE-2025-31199方面的合作。
我们鼓励用户确保他们已应用Apple发布的安全更新以缓解此问题。
随着跨平台威胁变得越来越普遍,Microsoft保持警惕,监控威胁形势,以发现影响macOS和其他非Windows设备的新漏洞和攻击者技术。我们对漏洞发现和威胁情报共享的主动方法增强了保护技术,确保用户无论使用何种平台或设备,都能享受安全的计算体验,免受威胁。
Jonathan Bar Or
Alexia Wilson
Christine Fossaceca
微软威胁情报团队
参考文献
- https://support.apple.com/guide/mac-help/search-with-spotlight-mchlp1008/mac
- https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFBundles/AboutBundles/AboutBundles.html
- https://ss64.com/mac/mdimport.html
- https://ss64.com/mac/mdfind.html
- https://theevilbit.github.io/posts/macos_persistence_spotlight_importers/
- https://attack.mitre.org/tactics/TA0003/
- https://objective-see.org/products/knockknock.html
- https://newosxbook.com/home.html
- https://developer.apple.com/library/archive/documentation/Carbon/Conceptual/MDImporters/Concepts/WritingAnImp.html
- https://developer.apple.com/documentation/xcode/configuring-the-macos-app-sandbox
- https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/understanding_utis/understand_utis_intro/understand_utis_intro.html
- https://manp.gs/mac/1/uttype
- https://www.apple.com/apple-intelligence/
- https://alastairs-place.net/blog/2012/06/06/utis-are-better-than-you-think-and-heres-why/
了解更多
在Black Hat 2025的VIP Mixer上会见微软威胁情报、事件响应和Microsoft安全响应中心的专家。了解我们的端到端平台如何帮助您增强弹性并提升安全态势。
Security Copilot客户可以使用独立体验创建自己的提示或运行预构建的提示簿,以自动化与此威胁相关的事件响应或调查任务。
有关微软威胁情报社区的最新安全研究,请查看微软威胁情报博客:https://aka.ms/threatintelblog。
要获取新发布的通知并加入社交媒体的讨论,请在LinkedIn上关注我们:https://www.linkedin.com/showcase/microsoft-threat-intelligence,以及在X(前Twitter)上:https://x.com/MsftSecIntel。
要听取微软威胁情报社区关于不断演变的威胁形势的故事和见解,请收听微软威胁情报播客:https://thecyberwire.com/podcasts/microsoft-threat-intelligence。