
Взлом Windows через iTunes - локальное повышение привилегий 0-day
Это разбор CVE-2024–44193 — эксплойта локального повышения привилегий в iTunes версии 12.13.2.3.
Она была исправлена Apple 12 сентября 2024 года. Ссылка на Security Advisory Apple: Apple's Security Advisory
iTunes версии 12.13.2.3 устанавливает службу Apple Device Discovery Service:
C:\Program Files\Common Files\Apple\Mobile Device Support\AppleMobileDeviceService.exe, которая уязвима к эксплойту локального повышения привилегий.
Из уважения и понимания к тем, кому неинтересен очередной плохо написанный и, вероятно, слишком длинный разбор, вот краткая версия:
Уязвимость возникает из-за неправильного управления правами пользователей в пути C:\ProgramData\Apple\*.
Это позволяет членам локальной группы "Users" записывать произвольные файлы в этот путь. Когда служба AppleMobileDeviceService.exe перезапускается, что может быть вызвано непривилегированным пользователем, можно подготовить примитив произвольного удаления папок/файлов, чтобы добиться произвольного выполнения кода в системе с привилегиями SYSTEM.
Предупреждение! Далее посредственные объяснения инструментов.
Пропустите этот раздел, если вы уже знакомы с инструментами.
Инструмент Oplock — это инструмент для использования «оппортунистической блокировки» (opportunistic lock) в Windows. Он позволяет нам «приостанавливать» процесс, блокируя файл до тех пор, пока не будут выполнены определённые требования; однако его также можно использовать для «приостановки» процесса во вредоносных целях, например, чтобы получить достаточно времени для запуска нашей полезной нагрузки эксплойта.
Инструмент FolderContentsDeleteToFolderDelete работает следующим образом: автоматически создаётся папка с файлом внутри. Затем на файл устанавливается оппортунистическая блокировка (oplock), чтобы приостановить процесс. Когда процесс остановлен, файл перемещается из папки. Затем папка удаляется и пересоздаётся как NTFS junction на целевой каталог. Когда oplock отменяется и процесс продолжает работу, удаление файла/папки следует по вновь созданному NTFS junction к целевому каталогу и удаляет этот файл перед продолжением выполнения.
Этот инструмент, вероятно, лучше всего описан в 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 и подпапка b внутри подпапки a. Это будет выглядеть так: 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 выполняет операцию CreateFile над aa.txt и bb.txt с параметром Delete On Close, процесс SYSTEM AppleMobileDeviceService.exe удаляет эти файлы.
Теперь мы можем создавать произвольные файлы внутри папки Lockdown и удалять их, что подводит нас к следующему изящному трюку.
В Windows можно использовать NTFS junction, чтобы перенаправить папку в другое место. В некотором смысле это похоже на симлинки в Linux.
Для иллюстрации можно создать NTFS junction (симлинк) внутри папки C:\ProgramData\Apple\Lockdown, указывающий на папку на рабочем столе.
Вы можете сделать это самостоятельно с помощью PowerShell: New-Item -Type Junction -Path whatever -Target "C:\Users\user\Desktop\AAyes", или просто использовать набор инструментов от ZDI:
Выполните следующую команду, чтобы направить NTFS junction внутри папки Lockdown на "Target" на рабочем столе.
.\FolderContentsDeleteToFolderDelete.exe /target "C:\Users\user\Desktop\AAyes" /initial "C:\ProgramData\Apple\Lockdown"
Когда служба будет перезапущена, недавно созданный NTFS junction будет указывать на AAyes, расположенный на рабочем столе.
Поскольку служба выполняет операцию CreateFile с параметром Delete On Close от имени SYSTEM, файл будет удалён.
Поскольку операция выполняется с привилегиями SYSTEM, мы получаем примитив произвольного удаления папок или файлов, а значит, можем добиться выполнения кода на хосте с правами SYSTEM.
Примечание:
Потребовалось внести определённые правки в исходный код проекта 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";
Поскольку служба рекурсивно следует по любым junction (симлинкам), гипотеза заключалась в том, что можно будет произвольно удалять файлы в системе от имени SYSTEM, используя уязвимую службу Apple, которая следует по NTFS junction. Поскольку уязвимая служба удобно позволяет непривилегированным пользователям перезапускать её с помощью трюка («Apps -> Installed apps -> Apple Mobile Device Support -> Modify -> Repair») через графический интерфейс Windows, можно запускать эксплойт по желанию. После перезапуска служба следует по NTFS junction, и предопределённое поведение программы диктует, что служба удалит файлы или папки, на которые выберет указать пользователь.
Другими словами, именно пользователь решает, какие файлы или папки служба удалит. Поскольку она работает от имени SYSTEM, мы можем удалить почти любой файл в системе (кроме файлов, требующих привилегий TrustedInstaller).
Это означает, что мы можем тщательно выстроить цепочку действий, которая сделает следующее:
Доказательство концепции состоит из 5 шагов.
.\SetOpLock.exe C:\ProgramData\Apple\Lockdown\
Запустите перезапуск службы Apps -> Installed apps -> Apple Mobile Device Support -> Modify -> Repair
Подготовьте трюк с откатом MSI
.\FolderOrFileDeleteToSystem.exe
.\FolderContentsDeleteToFolderDelete.exe /target 'C:\Config.Msi' /initial "C:\ProgramData\Apple\Lockdown"
Когда в пятом шаге снимается Oplock, мы наблюдаем за процессом FolderContentsDeleteToFolderDelete, чтобы убедиться, что NTFS junction был пройден и что Config.MSI, расположенный в C:, был корректно удалён. Затем мы наблюдаем за процессом FolderOrFileDeletionToSystem.exe, чтобы убедиться, что мы выигрываем состояние гонки и что «вредоносная» папка Config.MSI с изменённым скриптом отката записана. Если всё идёт правильно, мы нажимаем CTRL+ALT+DELETE, открываем меню специальных возможностей в правом нижнем углу и запускаем экранную клавиатуру. Поскольку мы перезаписали HID.DLL в C:\Program Files\Common Files\microsoft shared\ink\HID.DLL с помощью вредоносного скрипта отката, появится командная оболочка CMD от имени SYSTEM, что завершит наш эксплойт.

Выполнение и мониторинг FolderContentsDeleteToFolderDelete.exe
Выполнение и мониторинг FolderOrFileDeleteToSystem.exe
Получаем оболочку SYSTEM