白帽故事 · 2024年10月9日 0

【0day】通过 iTunes 实现 Windows 本地提权

CVE-2024–44193

这是一篇关于 CVE-2024-44193 的文章,是 iTunes 版本 12.13.2.3 中的本地权限提升漏洞。

Apple 已于 2024 年 9 月 12 日修复了该漏洞。 Apple 安全建议链接详见:https://support.apple.com/en-us/121328

iTunes 版本 12.13.2.3 在安装 Apple 设备发现服务: C:\Program Files\Common Files\Apple\Mobile Device Support\AppleMobileDeviceService.exe 容易受到本地权限升级漏洞攻击。

一言蔽之

简单的概括,漏洞是由于C:\ProgramData\Apple*路径中的用户权限管理不善而导致的。

这允许本地组“用户”的成员在该路径中写入任意文件,当AppleMobileDeviceService.exe服务重新启动时(可由非特权用户触发),可以任意删除文件夹/文件,从而以 SYSTEM 权限在系统上执行任意代码。

工具

如果你已经熟悉以下工具,可跳过本小节内容。

Oplock

Oplock工具是Windows中使用“opportunistic lock”的工具。该工具允许我们通过锁定文件来“停止”进程,直到满足某些要求,但它也可以用于出于恶意目的“停止”进程,例如为我们的漏洞利用获得足够的时间。

  • 文件夹内容删除到文件夹删除

FilesystemEoPs

FolderContentsDeleteToFolderDelete 工具的工作原理是自动创建一个包含文件的文件夹,然后在文件上设置 oplock 以停止该进程,当进程停止时,文件将从文件夹中移出。

然后,该文件夹将被删除,并重新创建为目标目的地的 NTFS 连接。

当oplock被取消并且进程继续时,文件/文件夹删除将遵循新创建的 NTFS 连接到目标目的地,并在继续执行之前删除该文件。

  • 文件夹或文件删除到系统

扩展阅读:滥用任意文件删除来提升权限和其它绝招

Writeup

漏洞服务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* 路径并递归查询该目录中的子文件夹和文件并将其删除。

file

路径中存在的用户权限问题: C:\ProgramData\Apple*

Windows Sysinternals https://learn.microsoft.com/en-us/sysinternals/ accesschk64.exe 可用于检查特定文件夹的访问权限。

本地组“Users”的成员具有写入权限 C:\ProgramData\Apple\Lockdown\ 文件夹,可以使低权限用户可以在该文件夹中写入任意文件。

file

任意文件/文件夹删除

因为可以在锁定路径中写入任意文件,并且系统进程将在服务重新启动时删除它们,所以可以创建任意文件/文件夹删除原语。

为了说明这一点,我们在 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

file

从上面的屏幕截图中可以看出,“CreateFile”操作正在运行,并且 aa.txt 上的“Delete On Close”选项将其删除。

当 SYSTEM 进程对aa.txt和bb.txt运行CreateFile操作并使用文件上的Delete On Close选项时,SYSTEM 进程AppleMobileDeviceService.exe将删除这些文件。

现在我们可以在 Lockdown 文件夹中创建任意文件,并删除它们,这将引导我们进行下一个巧妙的利用。

NTFS 连接点

在 Windows 中,可以使用 NTFS 连接将文件夹定向到其他位置。在某种程度上,这类似于 Linux 中的符号链接。

为了说明这一点,可以在C:\ProgramData\Apple\Lockdown文件夹中创建一个指向桌面上文件夹的 NTFS 连接(符号链接)。

可以使用 PowerShell 自行实现此目的 New-Item -Type Junction -Path whatever -Target "C:\Users\user\Desktop\AAyes" ,或者使用 ZDI 提供的工具集-FilesystemEoPs:

运行以下命令将 Lockdown 文件夹中的 NTFS 连接点指向桌面上的“目标”:

.\FolderContentsDeleteToFolderDelete.exe /target "C:\Users\user\Desktop\AAyes" /initial "C:\ProgramData\Apple\Lockdown"

当服务重新启动时,新创建的 NTFS 连接将指向位于桌面上的AAyes 。

由于服务以 SYSTEM 身份运行带有Delete On Close选项的CreateFile操作,因此文件将被删除。

因为该操作是使用 SYSTEM 权限运行的,所以就有了一个任意文件夹或文件删除原语,这意味着可以在主机上以 SYSTEM 身份执行代码。

file

注:由于文件名/文件夹名称限制,需要在FolderContentsDeleteToFolderDelete 项目中进行某些源代码编辑,文件名/文件夹名称必须非常短才能进行删除。

其背后的原因目前尚不清楚。

FolderContentsDeleteToFolderDelete源代码编辑

const wchar_t folder2path[] = L"C:\\d";
const wchar_t exploitFileName[] = L"e.txt";

// It was required to shorten the two consstants: “folder2path” and “exploitFileName”
// They where changed to: L"C:\\d" and L"e.txt" because it seemed that file and folder name length had a meaningful impact on exploit functionality.

[...]

// We also needed to edit the “folder1path” value to L”c” in order to shorten it.
folder1path += L"c";

EXP开发

由于该服务将递归地遵循任何连接点(符号链接),因此可以使用易受攻击的 Apple 服务(该服务将遵循 NTFS 连接点)以 SYSTEM 身份任意删除系统上的文件。

由于易受攻击的服务方便地允许非特权用户使用 Windows GUI 使用“应用程序 -> 安装的应用程序 -> Apple 移动设备支持 -> 修改 -> 修复”技巧来重新启动服务,因此可以随意触发该漏洞利用。

一旦服务重新启动,它将遵循 NTFS 连接,而确定的程序行为决定了服务将删除用户选择指向的文件或文件夹。

换句话说,由用户决定该服务将删除哪些文件或文件夹,因为它作为 SYSTEM 运行,所以我们几乎可以删除系统上的任何文件(无需 TrustedInstaller 权限的文件)。

我们可以精心设计一系列事件来执行以下操作:

  1. 准备 oplock 在方便的时候停止进程,以便准备利用步骤

  2. 重启服务, oplock被触发,进程被停止

  3. 使用FolderOrFileDeleteToSystem.exe准备MSI回滚技巧

  4. 使用FolderContentsDeleteToFolderDelete.exe 准备 NTFS 连接,将文件删除原语指向由 MSI 回滚技巧步骤准备的 Config.MSI

  5. 释放oplock

PoC

  1. 在 C:\ProgramData\Apple\Lockdown\ 上设置 Oplock
    .\SetOpLock.exe C:\ProgramData\Apple\Lockdown\

file

  1. 触发服务重新启动 应用程序 -> 已安装的应用程序 -> Apple 移动设备支持 -> 修改 -> 修复

  2. 准备MSI回滚技巧

.\FolderOrFileDeleteToSystem.exe

  1. 准备 Windows 连接(符号链接)步骤,将服务任意文件夹/文件删除原语指向 MSI 安装程序

.\FolderContentsDeleteToFolderDelete.exe /target 'C:\Config.Msi' /initial "C:\ProgramData\Apple\Lockdown"

  1. 释放oplock

当 Oplock 在第五步中释放时,监视FolderContentsDeleteToFolderDelete 进程,以验证是否遵循 NTFS junciton 以及位于 C:\ 中的 Config.MSI 是否已正确删除。

然后,监视FolderOrFileDeletionToSystem.exe 进程,以验证我们是否赢得了竞争条件,以及是否写入了包含修改后的回滚脚本的“恶意”Config.MSI 文件夹。

如果一切顺利,可以按 CTRL+ALT+DELETE,打开右下角的辅助功能菜单,然后打开屏幕键盘。

因为已经使用恶意回滚脚本覆盖了 C:\Program Files\Common Files\microsoft shared\ink\HID.DLL 中的 HID.DLL,所以 CMD shell 将作为 SYSTEM 弹出来完成我们的利用。

file

执行和监视FolderContentsDeleteToFolderDelete.exe。

file

执行和监视FolderOrFileDeleteToSystem.exe。

file

弹出 SYSTEM Shell。

以上内容由骨哥翻译并整理。

原文:https://github.com/mbog14/CVE-2024-44193