本文是 CVE-2024–44193 的分析报告,该漏洞是 iTunes 12.13.2.3 版本中的一个本地权限提升漏洞。
该漏洞于 2024 年 9 月 12 日由 Apple 修复。 Apple 安全公告链接:Apple 安全公告
iTunes 12.13.2.3 版本会安装 Apple 设备发现服务:
C:\Program Files\Common Files\Apple\Mobile Device Support\AppleMobileDeviceService.exe,该服务存在本地权限提升漏洞。
对于那些不关心另一篇写得不好且可能太长的分析报告的人,这里给出简短版本:
该漏洞源于 C:\ProgramData\Apple\* 路径中用户权限管理不善。这使得本地组“Users”的成员可以在该路径内写入任意文件。当 AppleMobileDeviceService.exe 服务重启时(可由非特权用户触发),可以武装一个任意文件夹/文件删除原语,从而以 SYSTEM 权限在系统上获得任意代码执行。
警告! 即将出现平庸的工具解释。
如果你已经熟悉这些工具,请跳过此部分。
Oplock 工具用于在 Windows 中使用“机会锁”。该工具允许我们通过锁定一个文件来“暂停”进程,直到某些条件满足;但它也可以用于恶意目的,例如为我们的漏洞利用载荷赢得足够的运行时间。
FolderContentsDeleteToFolderDelete 工具的工作原理是自动创建一个包含文件的文件夹。然后在文件上设置一个 oplock 以暂停进程。当进程暂停时,文件被移出文件夹。然后文件夹被删除,并重新创建为一个指向目标位置的 NTFS 交接点。 当 oplock 被取消,进程继续时,文件/文件夹删除操作会跟随新创建的 NTFS 交接点到目标位置,并在继续执行之前删除该文件。
这个工具最好由 Zero Day Initiative 来解释,所以这里直接提供他们的解释链接:
AppleMobileDeviceService.exe 简介安装 iTunes 后,还会安装一个服务:AppleMobileDeviceService.exe,该服务以 SYSTEM 权限运行。
当我使用 Windows Sysinternals Process Monitor (Procmon) 调查该服务时,立即发现了一些令人担忧的行为。
该服务会递归遍历 C:\ProgramData\Apple\Lockdown\* 路径下的所有文件,并删除所有不属于该位置的文件夹和文件。
在本地测试中,我使用 ProcessHacker2 强制重启该服务,以检查程序行为。
观察到的行为是:以 SYSTEM 权限运行的服务会查询该目录及其所有子目录,然后执行 CreateFile 操作,并启用 Delete On Close 选项,这意味着 SYSTEM 服务会查询 C:\ProgramData\Apple\Lockdown\* 路径,递归查询该目录下的子文件夹和文件,并将其删除。
C:\ProgramData\Apple\* 中存在问题的用户权限可以使用 Windows Sysinternals https://learn.microsoft.com/en-us/sysinternals/ 的 accesschk64.exe 来检查特定文件夹的访问权限。
本地组“Users”的成员在 C:\ProgramData\Apple\Lockdown\ 文件夹中拥有写入权限,这使得低权限用户可以在该文件夹中写入任意文件。
由于我们可以在 Lockdown 路径内写入任意文件,并且在服务重启时 SYSTEM 进程会删除这些文件,因此可以创建一个任意文件/文件夹删除原语。
为了说明这一点,我在 Lockdown 文件夹中创建了两个子文件夹。
子文件夹 a,以及子文件夹 a 中的子文件夹 b。
看起来像这样:C:\ProgramData\Apple\Lockdown\a\b
在子文件夹 a 中有一个名为 aa.txt 的文本文件,在子文件夹 b 中有一个名为 bb.txt 的文本文件。
C:\ProgramData\Apple\Lockdown\a\aa.txt
C:\ProgramData\Apple\Lockdown\a\b\bb.txt
如上截图所示,“CreateFile”操作以“Delete On Close”选项对 aa.txt 运行,将其删除。
当 SYSTEM 进程以 Delete On Close 选项对 aa.txt 和 bb.txt 执行 CreateFile 操作时,SYSTEM 进程 AppleMobileDeviceService.exe 会删除这些文件。
现在我们可以创建任意文件并在 Lockdown 文件夹中删除它们,这引出了下一个巧妙的技巧。
在 Windows 中,可以使用 NTFS 交接点将文件夹指向其他地方。从某种程度上来说,这与 Linux 中的符号链接类似。
为了说明这一点,可以在 C:\ProgramData\Apple\Lockdown 文件夹中创建一个指向桌面上某个文件夹的 NTFS 交接点(符号链接)。
你可以使用 PowerShell New-Item -Type Junction -Path whatever -Target "C:\Users\user\Desktop\AAyes" 来实现,或者直接使用 ZDI 提供的工具集:
运行以下命令,将 Lockdown 文件夹内的 NTFS 交接点指向桌面上的“Target”。
.\FolderContentsDeleteToFolderDelete.exe /target "C:\Users\user\Desktop\AAyes" /initial "C:\ProgramData\Apple\Lockdown"
当服务重启时,新创建的 NTFS 交接点会指向桌面上的 AAyes。
由于该服务以 SYSTEM 权限运行 CreateFile 操作并带有 Delete On Close 选项,该文件将被删除。
由于该操作以 SYSTEM 权限运行,我们拥有任意文件夹或文件删除原语,这意味着我们可以以 SYSTEM 身份在主机上获得代码执行。
注意:
由于文件名/文件夹名称限制,有必要对 FolderContentsDeleteToFolderDelete 项目进行某些源代码编辑。文件名/文件夹名称必须非常短才能进行删除。其原因未知,并且由于短名称可靠地解决了问题,未进一步调查。
const wchar_t folder2path[] = L"C:\\d";
const wchar_t exploitFileName[] = L"e.txt";
// 需要缩短两个常量:“folder2path”和“exploitFileName”
// 它们被改为:L"C:\\d"和L"e.txt",因为似乎文件/文件夹名称长度对漏洞利用功能有显著影响。
[...]
// 我们还需要将“folder1path”值改为L"c”以缩短它。
folder1path += L"c";
由于服务会递归跟随任何交接点(符号链接),因此原理是:通过易受攻击的 Apple 服务(该服务会跟随 NTFS 交接点),可以以 SYSTEM 权限在系统上任意删除文件。由于该易受攻击的服务方便地允许非特权用户通过 Windows GUI 中的(“应用 -> 已安装的应用 -> Apple Mobile Device Support -> 修改 -> 修复”)技巧重启服务,因此可以随时触发该漏洞。一旦服务重启,它会跟随 NTFS 交接点,并且确定的程序行为规定服务会删除用户选择指向的文件或文件夹。
换句话说,由用户决定服务删除哪些文件或文件夹。 由于它以 SYSTEM 身份运行,我们可以删除系统上 几乎 任何文件(不需要 TrustedInstaller 权限的文件除外)。
这意味着我们可以精心策划一系列事件,按以下步骤进行:
概念验证包括 5 个步骤。
C:\ProgramData\Apple\Lockdown\ 上设置 Oplock.\SetOpLock.exe C:\ProgramData\Apple\Lockdown\
触发服务重启 应用 -> 已安装的应用 -> Apple Mobile Device Support -> 修改 -> 修复
准备 MSI 回滚技巧
.\FolderOrFileDeleteToSystem.exe
.\FolderContentsDeleteToFolderDelete.exe /target 'C:\Config.Msi' /initial "C:\ProgramData\Apple\Lockdown"
当第 5 步释放 Oplock 时,我们监控 FolderContentsDeleteToFolderDelete 进程以验证 NTFS 交接点是否被跟随,并且位于 C:\ 的 Config.MSI 被正确删除。然后我们监控 FolderOrFileDeletionToSystem.exe 进程以验证我们赢得了竞争条件,并且带有修改后回滚脚本的“恶意”Config.MSI 文件夹被写入。如果一切顺利,我们可以按 CTRL+ALT+DELETE,打开右下角的辅助功能菜单,打开屏幕键盘。由于我们通过恶意回滚脚本覆盖了 C:\Program Files\Common Files\microsoft shared\ink\HID.DLL,将弹出一个 SYSTEM 命令提示符,完成我们的漏洞利用。

执行并监控 FolderContentsDeleteToFolderDelete.exe
执行并监控 FolderOrFileDeleteToSystem.exe
弹出 SYSTEM 命令提示符