摘要(TL;DR)
我在 macOS 日历中发现了一个零点击漏洞,该漏洞允许攻击者在日历沙盒环境内添加或删除任意文件。这可能导致许多不良后果,包括恶意代码执行,这些代码可以与照片的安全保护规避相结合,从而危害用户敏感的照片 iCloud 照片数据。Apple 已在 2022 年 10 月至 2023 年 9 月期间修复了所有漏洞。
如果您想看我关于此的演示视频,您可以查看我的 Disobey 2024 演示文稿:https://www.youtube.com/watch ?v=9NlQXLLQrvk
漏洞详细信息
第一阶段:日历中的任意文件写入和删除漏洞(CVE-2022-46723)
攻击者可以向受害者发送包含文件附件的恶意日历邀请。附件的文件名未经过正确处理。攻击者可以利用此漏洞,通过在 ATTACH 部分中设置文件的任意路径:“FILENAME=../../../PoC.txt”,成功进行目录遍历攻击。
这将导致文件被添加到 ~/Library/Calendar/PoC.txt 而不是 ~/Library/Calendar/[CalendarID]/Attachments/[eventid]/ 。
如果攻击者指定的文件已经存在,则指定的文件将以名称“PoC.txt-2”保存。但是,如果攻击者发送的事件/附件后来被删除,则原始名称(PoC.txt)的文件将被删除。此漏洞可用于从文件系统(文件系统“沙箱”内)中删除现有文件。
漏洞似乎至少存在于最新的 macOS Montrey 12.5 中。MacOS 13.0 beta4 似乎不再存在漏洞。
第二阶段:利用任意文件写入漏洞获取远程代码执行(RCE)
当发现此漏洞时,Ventura 即将发布。macOS 版本升级过程可被利用通过日历中的打开文件功能来获取远程代码执行
为了获得 RCE,我们将利用之前发现的任意文件写入漏洞,用多个文件感染日历。当它们组合在一起时,当 macOS Monterey 升级到 Ventura 时,它们将触发 RCE 漏洞。
注入文件 #1:000Hacked-$RANDOM.calendar
该文件包含类似于“Siri Suggested”-calendar 的日历数据。
建议使用带有警报功能的重复事件。这将打开其他注入的文件。
注入文件 #2:CalendarTruthFileMigrationInProgress 文件
该文件将确保旧日历格式的现有日历将升级并合并到新数据库。
注入文件 #3:CalPoCInit.dmg
注入文件 #1 中的日历事件中嵌入的警报将触发打开文件 ~/Library/Calendars/CalPoCInit.dmg
CalPoCInit.dmg 包含对背景图像的引用,该图像将指向外部 samba 服务器。此引用是 .DS_Store 中的书签。它存储在此图像文件的根目录中。即使 CalPoCInit.dmg 挂载处于隔离状态,挂载也会在没有隔离标志的情况下进行。
注入文件 #4:stage1.url
注入文件 #1 中嵌入的日历事件发出的第二个警报将打开文件 ~/Library/Calendars/stage1.url
此文件 stage1.url 包含一个 URL,指向由注入文件 #3 触发的先前安装的 Samba 安装内的应用程序。此 URL 为 file:///Volumes/CalPoCPayload/MyMidiTest.app。
恶意应用程序
这将导致 Finder 打开 /Volumes/CalPoCPayload/,从而自动触发索引。这将导致 MyMidiTest.app 被索引。这是唯一 URL 注册所必需的。
在我们的应用程序包中,MyMidiTest.app/Contents/Info.plist 文件包含一个触发器,它将导致为自定义 URL 类型注册处理程序:
< key > CFBundleURLTypes </ key >
< array >
< dict >
< key > CFBundleURLName </ key >
< string > MyMidi URL </ string >
< key > CFBundleURLSchemes </ key >
< array >
< string > mymiditest </ string >
</ array >
</ dict >
</ array >
注入文件 #5:stage2.url
注入文件 #1 中嵌入的日历事件的第三条也是最后一条警报将打开文件 ~/Library/Calendar/stage2.url,其中包含对自定义 url“mymiditest://”的引用,这将在无需任何用户交互的情况下启动我们的恶意应用程序。
这是可能的,因为该应用程序位于我们利用的 Samba 挂载内,而该挂载没有隔离标志。
mymiditest 应用程序会将第 3 阶段所需的文件写入 /var/tmp/,并在终端中使用“open /var/tmp/PhotosPoC.sh”启动脚本。目标是在我们的沙箱中腾出更多空间。
第 3 阶段:获取敏感照片数据的访问权限
为了展示漏洞链前两个阶段所获得的超能力,我选择滥用照片来泄露敏感的用户数据,即私人照片。TCC 应该限制和阻止对照片等用户敏感文件的访问。但是,通过利用漏洞更改照片的配置,可以访问存储在 iCloud 上的图片。这是通过将系统照片库更改为指向不受 TCC 保护的路径来实现的。
更改照片的配置以获取对 iCloud 文件的访问权限
攻击者可以创建一个照片配置文件,使用不同的系统照片库。可以通过“defaults import”导入配置。
此 PoC 漏洞链的第 2 阶段已准备好并自动删除一个配置,该配置使用 /var/tmp/mypictures/Syndication.photoslibrary 作为 Photos、cloudphotod 和 photolibraryd 的系统照片库。您可以从 /var/tmp/mypictures/*.plist 中找到在第 2 阶段自动创建的这些恶意配置。
当漏洞链运行PhotosPoC.sh时,所有正在运行的与照片相关的应用程序都将被终止,并使用默认值导入新配置。
原始配置将备份到 /var/tmp/mypictures/*-orig.plist
恶意配置将从 /var/tmp/mypictures/ 导入。
利用漏洞链将在照片中打开新的照片库,命令为“open /var/tmp/mypictures/Syndication.photoslibrary”。
Syndication.photoslibrary 是一个空的模板库。
现在,照片将与新的系统照片库一起运行,并将启用 iCloud 同步,原始文件将下载到不受保护的目录中。
当这些文件同步到磁盘时,它们将被复制到 /var/tmp/PoCLoot$RANDOM/ 中的新目录中。这些敏感和私人数据也可以复制到外部资源,并且可以通过漏洞利用 curl 命令通过简单的修改将数据发布到外部 Web 服务器。
全链条
漏洞利用链
要利用整个链,必须经过多个步骤来克服 macOS 中的所有安全障碍。首先,我们注入多个文件以逃避沙盒,并激活漏洞链的后续阶段。然后,我们必须使用 SMB 技巧绕过 Gatekeeper 缓解来执行任意代码。要克服的最后一个挑战是 TCC 保护,从而能够访问敏感数据,例如 iCloud Photos。
在修复完成之前,我能够向任何Apple iCloud 用户发送恶意日历邀请,并窃取他们的 iCloud 照片,而无需任何用户交互。
感谢所有帮助我到达这里的人!你们知道自己是谁。
时间线
2022–08–08:报告日历沙盒中存在任意文件写入和删除行为
2022–10–24:(无 CVE)在 macOS Monterey 12.6.1 和 Ventura 13 中修复(Ventura beta3 存在漏洞)
2022–11–14:已发送 PoC,说明如何利用日历漏洞实现任意代码执行(绕过守门员)
2022–12–04:已发送 PoC,如何访问 iCloud 照片
2023–02–20:为日历漏洞添加了 CVE-2022–46723 积分和 CVE(赏金状态仍然未知)
2023–03–27:macOS Ventura 13.3 中修复了 Gatekeeper 规避问题(无 CVE 或积分)
2023–09–26:修复 CVE-2023–40434 照片漏洞并记入信用
2023 年 10 月 9 日:宣布与门禁规避和照片漏洞相关的漏洞赏金
2023–12–21:CVE-2023–40433 Gatekeeper 逃避漏洞被记入
2024-09-12:仍然没有与原始任意文件写入和删除漏洞(CVE-2022-46723)相关的赏金
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...