
Windows über iTunes hacken – Lokale Privilegieneskalation 0-Day
Dies ist ein Write-up über CVE-2024–44193, einen Local Privilege Escalation Exploit in iTunes Version 12.13.2.3.
Es wurde am 12. September 2024 von Apple gepatcht. Link zum Apple Security Advisory: Apple Security Advisory
iTunes Version 12.13.2.3 installiert den Apple Device Discovery Service:
C:\Program Files\Common Files\Apple\Mobile Device Support\AppleMobileDeviceService.exe
der anfällig für einen Local Privilege Escalation Exploit ist.
Aus Respekt und Verständnis für diejenigen, die sich nicht für ein weiteres schlecht geschriebenes und wahrscheinlich zu langes Write-up interessieren, hier die Kurzfassung:
Die Schwachstelle wird durch schlechtes Management der Benutzerberechtigungen im Pfad C:\ProgramData\Apple\* ermöglicht.
Dies erlaubt Mitgliedern der lokalen Gruppe 'Benutzer', beliebige Dateien in diesem Pfad zu schreiben.
Wenn der Dienst AppleMobileDeviceService.exe neu gestartet wird – was von einem unprivilegierten Benutzer ausgelöst werden kann – kann eine beliebige Ordner-/Dateilöschungs-Primitive aktiviert werden, um eine beliebige Codeausführung auf dem System mit SYSTEM-Berechtigungen zu erlangen.
Warnung! Es folgen mittelmäßige Werkzeugerklärungen.
Überspringen Sie diesen Abschnitt, wenn Sie mit den Werkzeugen bereits vertraut sind.
Das Oplock-Tool ist ein Werkzeug, um einen 'Opportunistic Lock' in Windows zu verwenden. Das Tool erlaubt es uns, einen Prozess 'anzuhalten', indem es eine Datei sperrt, bis bestimmte Anforderungen erfüllt sind. Es kann jedoch auch für böswillige Zwecke verwendet werden, um einen Prozess anzuhalten, um genügend Zeit für die Ausführung unserer Exploit-Payload zu gewinnen.
Das FolderContentsDeleteToFolderDelete-Tool funktioniert, indem es automatisch einen Ordner mit einer Datei darin erstellt. Anschließend wird ein Oplock auf die Datei gesetzt, um den Prozess anzuhalten. Wenn der Prozess angehalten ist, wird die Datei aus dem Ordner verschoben. Der Ordner wird dann gelöscht und als NTFS-Junction zu einem Zielort neu erstellt. Wenn der Oplock aufgehoben wird und der Prozess fortgesetzt wird, folgt die Datei-/Ordnerlöschung der neu erstellten NTFS-Junction zum Zielort und löscht diese Datei, bevor die Ausführung fortgesetzt wird.
Dieses Tool wird wahrscheinlich am besten von der Zero Day Initiative erklärt, daher hier ein Link zu einer Erklärung direkt von ihnen:
Abusing Arbitrary File Deletes to Escalate Privileges and other Great Tricks
AppleMobileDeviceService.exeSobald iTunes installiert ist, wird auch ein Dienst installiert: AppleMobileDeviceService.exe, der mit SYSTEM-Berechtigungen läuft.
Als ich diesen Dienst mit Windows Sysinternals Process Monitor (Procmon) untersuchte, bemerkte ich sofort ein besorgniserregendes Verhalten.
Der Dienst wird rekursiv alle Dateien im Pfad C:\ProgramData\Apple\Lockdown\* durchgehen und alle Ordner und Dateien löschen, die dort nicht hingehören.
Für lokale Tests habe ich ProcessHacker2 verwendet, um den Dienst zwangsweise neu zu starten und das Programmverhalten zu überprüfen.
Das beobachtete Verhalten war, dass der als SYSTEM laufende Dienst das Verzeichnis und alle Unterverzeichnisse darin abfragt und dann den CreateFile-Vorgang mit aktivierter Option Delete On Close ausführt, was bedeutet, dass der SYSTEM-Dienst den Pfad C:\ProgramData\Apple\Lockdown\* abfragt und rekursiv die Unterordner und -dateien in diesem Verzeichnis abfragt und löscht.
C:\ProgramData\Apple\*Windows Sysinternals https://learn.microsoft.com/en-us/sysinternals/ accesschk64.exe kann verwendet werden, um Zugriffsrechte auf bestimmte Ordner zu überprüfen.
Mitglieder der lokalen Gruppe 'Benutzer' haben Schreibberechtigungen im Ordner C:\ProgramData\Apple\Lockdown\, was es niedrig privilegierten Benutzern ermöglicht, beliebige Dateien innerhalb des Ordners zu schreiben.
Da wir beliebige Dateien im Lockdown-Pfad schreiben können und der SYSTEM-Prozess sie beim Neustart des Dienstes löscht, war es möglich, eine beliebige Datei-/Ordnerlöschungs-Primitive zu erstellen.
Um dies zu veranschaulichen, erstelle ich zwei Unterordner innerhalb des Lockdown-Ordners. Unterordner a und Unterordner b innerhalb von Unterordner a. Das sieht dann so aus: C:\ProgramData\Apple\Lockdown\a\b
Im Unterordner a befindet sich eine Textdatei namens aa.txt und im Unterordner b eine Textdatei namens bb.txt
C:\ProgramData\Apple\Lockdown\a\aa.txt
C:\ProgramData\Apple\Lockdown\a\b\bb.txt
Wie im obigen Screenshot zu sehen ist, wird der 'CreateFile'-Vorgang mit der Option 'Delete On Close' auf aa.txt ausgeführt, wodurch es gelöscht wird.
Wenn der SYSTEM-Prozess den Vorgang CreateFile auf aa.txt und bb.txt ausführt, und zwar mit der Option Delete On Close auf die Dateien, wird der SYSTEM-Prozess AppleMobileDeviceService.exe die Dateien löschen.
Nun ist es uns möglich, beliebige Dateien im Lockdown-Ordner zu erstellen und zu löschen, was uns zum nächsten netten Trick führt.
In Windows ist es möglich, NTFS-Junctions zu verwenden, um einen Ordner an einen anderen Ort umzuleiten. In gewisser Weise ähnelt dies Symlinks unter Linux.
Um dies zu veranschaulichen, ist es möglich, eine NTFS-Junction (Symlink) innerhalb des Ordners C:\ProgramData\Apple\Lockdown zu erstellen, die auf einen Ordner auf dem Desktop verweist.
Sie können dies selbst mit PowerShell erreichen: New-Item -Type Junction -Path whatever -Target "C:\Users\user\Desktop\AAyes", oder einfach das Toolset von ZDI verwenden:
Führen Sie den folgenden Befehl aus, um eine NTFS-Junction innerhalb des Lockdown-Ordners auf 'Target' auf dem Desktop zu verweisen.
.\FolderContentsDeleteToFolderDelete.exe /target "C:\Users\user\Desktop\AAyes" /initial "C:\ProgramData\Apple\Lockdown"
Wenn der Dienst neu gestartet wird, wird die neu erstellte NTFS-Junction auf AAyes auf dem Desktop zeigen.
Da der Dienst den CreateFile-Vorgang mit der Option Delete On Close als SYSTEM ausführt, wird die Datei gelöscht.
Da der Vorgang mit SYSTEM-Berechtigungen ausgeführt wird, haben wir eine beliebige Ordner- oder Dateilöschungs-Primitive, was bedeutet, dass wir Codeausführung auf dem Host als SYSTEM erlangen können.
HINWEIS:
Es war notwendig, bestimmte Quellcode-Änderungen im FolderContentsDeleteToFolderDelete-Projekt aufgrund von Dateinamen-/Ordnernamen-Einschränkungen vorzunehmen. Die Dateinamen/Ordnernamen mussten sehr kurz sein, damit die Löschung stattfand. Der Grund dafür ist unbekannt und wurde nicht untersucht, da kurze Namen das Problem zuverlässig lösten.
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";
Da der Dienst rekursiv allen Junctions (Symlinks) folgt, war die These, dass es möglich sein würde, mit dem anfälligen Apple-Dienst, der der NTFS-Junction folgt, beliebige Dateien auf dem System als SYSTEM zu löschen. Da der anfällige Dienst bequemerweise unprivilegierten Benutzern erlaubt, den Dienst mit dem Trick (Apps -> Installierte Apps -> Apple Mobile Device Support -> Ändern -> Reparieren) über die Windows-GUI neu zu starten, ist es möglich, den Exploit nach Belieben auszulösen. Sobald der Dienst neu gestartet ist, folgt er der NTFS-Junction und das festgestellte Programmverhalten bestimmt, dass der Dienst die Dateien oder Ordner löscht, auf die der Benutzer zeigt. Mit anderen Worten, der Benutzer entscheidet, welche Dateien oder Ordner der Dienst löscht. Da er als SYSTEM läuft, können wir fast jede Datei auf dem System löschen (nicht Dateien, die TrustedInstaller-Berechtigungen erfordern).
Das bedeutet, dass wir sorgfältig eine Kette von Ereignissen erstellen können, die Folgendes bewirkt:
Der Proof of Concept besteht aus 5 Schritten.
.\SetOpLock.exe C:\ProgramData\Apple\Lockdown\
Dienstneustart auslösen Apps -> Installierte Apps -> Apple Mobile Device Support -> Ändern -> Reparieren
MSI-Rollback-Trick vorbereiten
.\FolderOrFileDeleteToSystem.exe
.\FolderContentsDeleteToFolderDelete.exe /target 'C:\Config.Msi' /initial "C:\ProgramData\Apple\Lockdown"
Wenn der Oplock in Schritt fünf freigegeben wird, überwachen wir den FolderContentsDeleteToFolderDelete-Prozess, um zu überprüfen, ob der NTFS-Junction gefolgt wurde und dass Config.MSI im C:-Verzeichnis korrekt gelöscht wurde.
Dann überwachen wir den FolderOrFileDeletionToSystem.exe-Prozess, um zu überprüfen, ob wir die Race Condition gewinnen und dass der 'bösartige' Config.MSI-Ordner mit dem modifizierten Rollback-Skript geschrieben wird.
Wenn alles richtig läuft, können wir STRG+ALT+ENTF drücken, das Eingabehilfen-Menü in der unteren rechten Ecke öffnen und die Bildschirmtastatur öffnen.
Da wir die HID.DLL in C:\Program Files\Common Files\microsoft shared\ink\HID.DLL mit dem bösartigen Rollback-Skript überschrieben haben, erscheint eine CMD-Shell als SYSTEM, was unseren Exploit abschließt.

Ausführen und Überwachen von FolderContentsDeleteToFolderDelete.exe
Ausführen und Überwachen von FolderOrFileDeleteToSystem.exe
Eine SYSTEM-Shell öffnen