
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 :