
Piratage de Windows via iTunes - Élévation de privilèges locale 0-day
Voici une analyse de CVE-2024–44193, une exploitation d'élévation de privilèges locale dans iTunes version 12.13.2.3.
Elle a été corrigée le 12 septembre 2024 par Apple. Lien vers l'avis de sécurité d'Apple : Avis de sécurité d'Apple
iTunes version 12.13.2.3 installe le service Apple Device Discovery Service :
C:\Program Files\Common Files\Apple\Mobile Device Support\AppleMobileDeviceService.exe, qui est vulnérable à une exploitation d'élévation de privilèges locale.
Par respect et compréhension pour ceux d'entre vous qui se moquent d'une énième analyse mal écrite et probablement trop longue, voici la version courte :
La vulnérabilité est rendue possible par une mauvaise gestion des permissions utilisateur dans le chemin C:\ProgramData\Apple\*.
Cela permet aux membres du groupe local "Users" d'écrire des fichiers arbitraires dans ce chemin. Lorsque le service AppleMobileDeviceService.exe est redémarré, ce qui peut être déclenché par un utilisateur non privilégié, une primitive de suppression arbitraire de dossier/fichier peut être armée pour obtenir une exécution de code arbitraire sur le système avec les privilèges SYSTEM.
Attention ! Explications d'outils médiocres à venir.
Passez cette section si vous connaissez déjà ces outils.
L'outil Oplock permet d'utiliser un « verrou opportuniste » (« opportunistic lock ») sous Windows. L'outil nous permet de « suspendre » un processus en verrouillant un fichier jusqu'à ce que certaines conditions soient satisfaites, mais il peut aussi être utilisé pour « suspendre » un processus à des fins malveillantes, comme gagner suffisamment de temps pour que notre charge utile d'exploitation s'exécute.
L'outil FolderContentsDeleteToFolderDelete fonctionne en créant automatiquement un dossier contenant un fichier. Un oplock est ensuite posé sur le fichier pour suspendre le processus. Lorsque le processus est suspendu, le fichier est déplacé hors du dossier. Le dossier est ensuite supprimé, puis recréé en tant que jonction NTFS vers une destination cible. Lorsque l'oplock est annulé et que le processus reprend, la suppression du fichier/dossier suit la jonction NTFS nouvellement créée jusqu'à la destination cible et supprime ce fichier avant de poursuivre son exécution.
Cet outil est probablement mieux expliqué par la Zero Day Initiative, voici donc un lien vers une explication directement de leur part :
Abuser des suppressions arbitraires de fichiers pour élever ses privilèges et autres grandes astuces
AppleMobileDeviceService.exeUne fois iTunes installé, il installe également un service : AppleMobileDeviceService.exe, qui s'exécute avec les privilèges SYSTEM.
En examinant ce service avec Windows Sysinternals Process Monitor (Procmon), j'ai immédiatement remarqué un comportement préoccupant.
Le service parcourt récursivement tous les fichiers du chemin C:\ProgramData\Apple\Lockdown\* et supprime tous les dossiers et fichiers qui n'y ont pas leur place.
Pour les tests locaux, j'ai utilisé ProcessHacker2 pour redémarrer de force le service afin d'inspecter le comportement du programme.
Le comportement observé était que le service s'exécutant en tant que SYSTEM interroge le répertoire et tous ses sous-répertoires, puis exécute l'opération CreateFile avec l'option Delete On Close activée, ce qui signifie que le service SYSTEM interroge le chemin C:\ProgramData\Apple\Lockdown\*, parcourt récursivement les sous-dossiers et fichiers de ce répertoire et les supprime.
C:\ProgramData\Apple\*Windows Sysinternals https://learn.microsoft.com/en-us/sysinternals/ accesschk64.exe peut être utilisé pour vérifier les droits d'accès sur des dossiers spécifiques.
Les membres du groupe local "Users" disposent de droits d'écriture dans le dossier C:\ProgramData\Apple\Lockdown\, ce qui permet aux utilisateurs à faibles privilèges d'écrire des fichiers arbitraires dans ce dossier.
Comme nous pouvons écrire des fichiers arbitraires dans le chemin Lockdown et que le processus SYSTEM les supprime lorsque le service est redémarré, il a été possible de créer une primitive de suppression arbitraire de fichier/dossier.
Pour illustrer cela, je crée deux sous-dossiers dans le dossier Lockdown.
Le sous-dossier a, et le sous-dossier b dans le sous-dossier a.
Ce qui donne : C:\ProgramData\Apple\Lockdown\a\b
Dans le sous-dossier a, il y a un fichier texte nommé aa.txt, et dans le sous-dossier b, un fichier texte nommé bb.txt
C:\ProgramData\Apple\Lockdown\a\aa.txt
C:\ProgramData\Apple\Lockdown\a\b\bb.txt
Comme on peut le voir dans la capture d'écran ci-dessus, l'opération « CreateFile » est exécutée avec l'option « Delete On Close » sur aa.txt, le supprimant.
Lorsque le processus SYSTEM exécute l'opération CreateFile sur aa.txt et bb.txt avec l'option Delete On Close sur les fichiers, le processus SYSTEM AppleMobileDeviceService.exe supprime les fichiers.
Il nous est maintenant possible de créer des fichiers arbitraires dans le dossier Lockdown et de les supprimer, ce qui nous mène à l'astuce suivante.
Sous Windows, il est possible d'utiliser des jonctions NTFS pour rediriger un dossier vers un autre endroit. D'une certaine manière, cela ressemble aux liens symboliques sous Linux.
Pour illustrer cela, il est possible de créer une jonction NTFS (lien symbolique) dans le dossier C:\ProgramData\Apple\Lockdown pointant vers un dossier sur le Bureau.
Vous pouvez le faire vous-même en utilisant PowerShell New-Item -Type Junction -Path whatever -Target "C:\Users\user\Desktop\AAyes", ou simplement utiliser la boîte à outils proposée par ZDI :
Exécutez la commande suivante pour faire pointer une jonction NTFS du dossier Lockdown vers « Target » sur le Bureau.
.\FolderContentsDeleteToFolderDelete.exe /target "C:\Users\user\Desktop\AAyes" /initial "C:\ProgramData\Apple\Lockdown"
Lorsque le service est redémarré, la jonction NTFS nouvellement créée pointera vers AAyes, situé sur le Bureau.
Comme le service exécute l'opération CreateFile avec l'option Delete On Close en tant que SYSTEM, le fichier sera supprimé.
Étant donné que l'opération est exécutée avec les privilèges SYSTEM, nous disposons d'une primitive de suppression arbitraire de dossier ou de fichier, ce qui signifie que nous pouvons exécuter du code sur la machine hôte en tant que SYSTEM.
REMARQUE :
Il a été nécessaire d'apporter certaines modifications au code source dans le projet FolderContentsDeleteToFolderDelete en raison de restrictions sur les noms de fichiers / dossiers. Les noms de fichiers / dossiers devaient être très courts pour que la suppression ait lieu. La raison de ce phénomène est inconnue et n'a pas été étudiée, car des noms courts ont résolu le problème de manière fiable.
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";
Étant donné que le service suit récursivement toutes les jonctions (liens symboliques), la thèse était qu'il serait possible de supprimer arbitrairement des fichiers sur le système en tant que SYSTEM en utilisant le service Apple vulnérable, qui suivrait la jonction NTFS. Comme le service vulnérable permet commodément aux utilisateurs non privilégiés de redémarrer le service via l'astuce (Apps -> Installed apps -> Apple Mobile Device Support -> Modify -> Repair) dans l'interface graphique Windows, il est possible de déclencher l'exploit à volonté. Une fois le service redémarré, il suivra la jonction NTFS et le comportement déterminé du programme impose que le service supprime les fichiers ou dossiers vers lesquels l'utilisateur choisit de pointer.
En d'autres termes, c'est l'utilisateur qui décide quels fichiers ou dossiers le service supprimera. Comme il s'exécute en tant que SYSTEM, nous pouvons supprimer presque n'importe quel fichier sur le système (sauf les fichiers nécessitant les privilèges TrustedInstaller).
Cela signifie que nous pouvons soigneusement élaborer une chaîne d'événements qui fera ce qui suit :
La preuve de concept comprend 5 étapes.
.\SetOpLock.exe C:\ProgramData\Apple\Lockdown\
Déclencher le redémarrage du service Apps -> Installed apps -> Apple Mobile Device Support -> Modify -> Repair
Préparer l'astuce de restauration MSI
.\FolderOrFileDeleteToSystem.exe
.\FolderContentsDeleteToFolderDelete.exe /target 'C:\Config.Msi' /initial "C:\ProgramData\Apple\Lockdown"
Lorsque l'oplock est libéré à l'étape cinq, nous surveillons le processus FolderContentsDeleteToFolderDelete pour vérifier que la jonction NTFS a été suivie et que le Config.MSI situé dans C:\ a bien été supprimé. Puis nous surveillons le processus FolderOrFileDeletionToSystem.exe pour vérifier que nous remportons la course (race condition) et que le dossier Config.MSI « malveillant » avec le script de restauration modifié est écrit. Si tout se passe bien, nous pouvons faire CTRL+ALT+DELETE, ouvrir le menu Accessibilité en bas à droite et ouvrir le Clavier visuel. Étant donné que nous avons remplacé le fichier HID.DLL dans C:\Program Files\Common Files\microsoft shared\ink\HID.DLL à l'aide du script de restauration malveillant, un shell CMD s'ouvrira en tant que SYSTEM, terminant ainsi notre exploit.

Exécution et surveillance de FolderContentsDeleteToFolderDelete.exe
Exécution et surveillance de FolderOrFileDeleteToSystem.exe
Obtention d'un shell SYSTEM