CVE-2024-44193 简介
iTunes 版本 12.13.2.3 安装了 Apple 设备发现服务:C:Program FilesCommon FilesAppleMobile Device SupportAppleMobileDeviceService.exe
,该服务容易受到本地特权提升攻击。
由于对 C:ProgramDataApple*
路径中的用户权限管理不善,因此启用了此漏洞。这允许本地组“用户”的成员在该路径中写入任意文件。当 AppleMobileDeviceService.exe
服务重新启动时(可由非特权用户触发),可以启用任意文件夹/文件删除,以使用 SYSTEM 权限在系统上执行任意代码。
Apple 于 2024 年 9 月 12 日对其进行了修补。
Apple 安全公告链接:https://support.apple.com/en-us/121328
AppleMobileDeviceService.exe 简介
iTunes 安装后,还会安装一个以 SYSTEM 权限运行的服务:AppleMobileDeviceService.exe
。
当我使用 Windows Sysinternals 进程监视器 (Procmon) 调查该服务时,发现了一些令人担忧的行为。
该服务将递归遍历 C:ProgramDataAppleLockdown*
路径中的所有文件,并删除不属于该路径的所有文件夹和文件。
对于本地测试,使用 ProcessHacker2 强制重启该服务以检查程序行为。
观察到的行为是,以 SYSTEM 身份运行的服务将查询目录及其中的所有子目录,然后它将运行启用了 Delete On Close
选项的 CreateFile
操作,这意味着 SYSTEM 服务将查询 C:ProgramDataAppleLockdown*
路径并递归查询该目录中的子文件夹和文件并删除它们。
路径C:ProgramDataApple *中的用户权限有问题
Windows Sysinternals https://learn.microsoft.com/en-us/sysinternals/ accesschk64.exe 可用于检查特定文件夹的访问权限。本地组“用户”的成员在“C:ProgramDataAppleLockdown”文件夹中拥有写入权限,这使得低权限用户可以写入文件夹中的任意文件。
任意文件/文件夹删除
因为我们可以在 Lockdown 路径中写入任意文件,并且 SYSTEM 进程将在服务重新启动时删除它们,所以可以实现任意文件/文件夹删除。为了说明这一点,在 Lockdown 文件夹中创建了两个子文件夹。
子文件夹 a,以及子文件夹 a 内的子文件夹 b。这将如下所示:C:ProgramDataAppleLockdownab
在子文件夹 a
中有一个名为 aa.txt
的文本文件,在子文件夹 b
中有一个名为 bb.txt
的文本文件
C:ProgramDataAppleLockdownaaa.txt
C:ProgramDataAppleLockdownabbb.txt
如上图所示,在 aa.txt 上运行“CreateFile”操作并使用“关闭时删除”选项将其删除。
当 SYSTEM 进程在“aa.txt”和“bb.txt”上运行操作“CreateFile”时,在文件上运行选项“关闭时删除”,SYSTEM 进程“AppleMobileDeviceService.exe”将删除这些文件。现在我们可以在 Lockdown 文件夹中创建任意文件,然后删除它们,这将引出下一个巧妙的技巧。
NTFS 连接
在 Windows 中,可以使用 NTFS 连接将文件夹定向到其他位置。在某种程度上,这类似于 Linux 中的符号链接。为了说明这一点,可以在 C:ProgramDataAppleLockdown
文件夹中创建一个指向桌面上文件夹的 NTFS 连接(符号链接)。您可以使用 PowerShell New-Item -Type Junction -Path whatever -Target "C:UsersuserDesktopAAyes"
自行实现此操作,或者只需使用 ZDI 提供的工具集:
FilesystemEoPs:https://github.com/thezdi/PoC/tree/main/FilesystemEoPs
运行以下命令将 Lockdown 文件夹中的 NTFS 连接指向桌面上的“目标”。
.FolderContentsDeleteToFolderDelete.exe /target "C:UsersuserDesktopAAyes" /initial "C:ProgramDataAppleLockdown"
当服务重新启动时,新创建的 NTFS 连接将指向位于桌面上的“AAyes”。
由于服务以 SYSTEM 身份运行带有“Delete On Close”选项的“CreateFile”操作,因此文件将被删除。由于该操作以 SYSTEM 权限运行,因此我们实现任意文件夹或文件删除,这意味着我们可以以 SYSTEM 身份在主机上执行代码。
注意:
由于文件名/文件夹名称限制,必须在 FolderContentsDeleteToFolderDelete 项目中进行某些源代码编辑。文件名/文件夹名称必须非常短才能进行删除。这背后的原因尚不清楚,而且尚未调查,因为短名称以可靠的方式解决了这个问题。
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 移动设备支持 -> 修改 -> 修复”)技巧重新启动服务,因此可以随意触发漏洞。服务重新启动后,它将遵循 NTFS 连接,并且确定的程序行为指示服务将删除用户选择指向的文件或文件夹。
换句话说,用户决定服务将删除哪些文件或文件夹。
由于它以 SYSTEM 身份运行,我们可以删除系统上的几乎任何文件(不是需要 TrustedInstaller 权限的文件)。
这意味着我们可以精心设计一系列事件来执行以下操作:
- 准备 oplock 以在方便我们准备利用步骤的时间停止进程
- 重新启动服务,触发 oplock 并停止进程
- 使用 FolderOrFileDeleteToSystem.exe 准备我们的 MSI 回滚技巧
- 准备我们的 NTFS 连接以指向使用 FolderContentsDeleteToFolderDelete.exe 执行 MSI 回滚技巧步骤准备的 Config.MSI 文件删除原语
- 释放 oplock
工具
- Oplock
SetOpLock:https://github.com/googleprojectzero/symboliclink-testing-tools/tree/main/SetOpLock
Oplock 工具是一种在 Windows 中使用“机会锁”的工具。该工具允许我们通过锁定文件直到满足某些要求来“停止”进程,但它也可以用于“停止”进程以用于恶意目的,例如为我们的漏洞利用负载获得足够的运行时间。
- FolderContentsDeleteToFolderDelete
FilesystemEoPs:https://github.com/thezdi/PoC/tree/main/FilesystemEoPs
FolderContentsDeleteToFolderDelete 工具的工作原理是自动创建一个包含文件的文件夹。然后在文件上设置 oplock 以停止该进程。当进程停止时,文件将移出文件夹。然后删除该文件夹,并将其重新创建为到目标目的地的 NTFS 连接点。当 oplock 被取消并且该过程继续时,文件/文件夹删除将遵循新创建的到目标目的地的 NTFS 连接点,并在继续执行之前删除该文件。
- FolderOrFileDeleteToSystem
FilesystemEoPs:https://github.com/thezdi/PoC/tree/main/FilesystemEoPs
Zero Day Initiative 可能对此工具的解释最好,因此这里有一个直接来自他们的解释链接:
滥用任意文件删除来提升权限和其他绝妙技巧(https://www.zerodayinitiative.com/blog/2022/3/16/abusing-arbitrary-file-deletes-to-escalate-privilege-and-other-great-tricks)
漏洞验证
漏洞验证包括 5 个步骤。
- 在 C:ProgramDataAppleLockdown 上设置 Oplock
.SetOpLock.exe C:ProgramDataAppleLockdown
- 触发服务重启应用 -> 已安装的应用 -> Apple Mobile Device Support -> 修改 -> 修复
- 准备 MSI 回滚技巧
.FolderOrFileDeleteToSystem.exe
- 准备 Windows Junction(符号链接)步骤,将服务任意文件夹/文件删除原语指向 MSI 安装程序
.FolderContentsDeleteToFolderDelete.exe /target 'C:Config.Msi' /initial "C:ProgramDataAppleLockdown"
- 释放 Oplock
当在第五步释放 Oplock 时,我们监控 FolderContentsDeleteToFolderDelete 进程以验证是否遵循了 NTFS 连接,以及位于 C: 中的 Config.MSI 是否被正确删除。然后,我们监控 FolderOrFileDeletionToSystem.exe 进程以验证我们是否赢得了竞争条件,以及是否写入了带有修改后的回滚脚本的“恶意”Config.MSI 文件夹。如果一切顺利,我们可以按 CTRL+ALT+DELETE,打开右下角的辅助功能菜单并打开屏幕键盘。由于我们已经使用恶意回滚脚本覆盖了 C:Program FilesCommon Filesmicrosoft sharedinkHID.DLL 中的 HID.DLL,因此 CMD shell 将以 SYSTEM 身份弹出,完成我们的漏洞利用。
执行和监视 FolderContentsDeleteToFolderDelete.exe
执行和监视 FolderOrFileDeleteToSystem.exe
弹出 SYSTEM shell
原文始发于微信公众号(7coinSec):「0day」通过 iTunes 入侵 Windows - 本地权限提升
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论