
Hackerare Windows tramite iTunes - Escalation locale dei privilegi 0-day
Questo è un write-up su CVE-2024–44193, un exploit di escalation dei privilegi locale in iTunes versione 12.13.2.3.
È stato corretto da Apple il 12 settembre 2024. Link all'advisor di sicurezza Apple: Advisor di sicurezza Apple
iTunes versione 12.13.2.3 installa l'Apple Device Discovery Service:
C:\Program Files\Common Files\Apple\Mobile Device Support\AppleMobileDeviceService.exe, che è vulnerabile a un exploit di escalation dei privilegi locale.
Per rispetto e comprensione di chi non ha voglia di leggere un altro write-up scritto male e probabilmente troppo lungo, ecco la versione breve:
La vulnerabilità è possibile a causa di una gestione inadeguata dei permessi utente nel percorso C:\ProgramData\Apple\*.
Ciò consente ai membri del gruppo locale "Users" di scrivere file arbitrari all'interno di quel percorso. Quando il servizio AppleMobileDeviceService.exe viene riavviato, cosa che può essere innescata da un utente non privilegiato, è possibile armare una primitiva di eliminazione arbitraria di cartelle/file per ottenere l'esecuzione di codice arbitrario sul sistema con privilegi SYSTEM.
Attenzione! Stanno per arrivare spiegazioni mediocri degli strumenti.
Salta questa sezione se conosci già gli strumenti.
Lo strumento Oplock è uno strumento per usare un “blocco opportunistico” in Windows. Lo strumento ci consente di “fermare” un processo bloccando un file finché non vengono soddisfatti determinati requisiti, ma può essere usato anche per “fermare” un processo a scopi dannosi, come guadagnare abbastanza tempo per eseguire il nostro payload di exploit.
Lo strumento FolderContentsDeleteToFolderDelete funziona creando automaticamente una cartella con un file al suo interno. Sul file viene quindi impostato un oplock per fermare il processo. Quando il processo viene fermato, il file viene spostato fuori dalla cartella. La cartella viene quindi eliminata e ricreata come junction NTFS verso una destinazione. Quando l'oplock viene annullato e il processo continua, l'eliminazione del file/cartella segue la junction NTFS appena creata fino alla destinazione ed elimina quel file prima di continuare l'esecuzione.
Questo strumento è probabilmente spiegato al meglio da Zero Day Initiative, quindi ecco un link a una spiegazione direttamente da parte loro:
Abusare delle eliminazioni arbitrarie di file per escalare i privilegi e altri grandi trucchi
AppleMobileDeviceService.exeUna volta installato iTunes, viene installato anche un servizio: AppleMobileDeviceService.exe, che viene eseguito con privilegi SYSTEM.
Quando ho analizzato il servizio con Process Monitor (Procmon) di Windows Sysinternals, ho subito notato un comportamento preoccupante.
Il servizio scorre ricorsivamente tutti i file all'interno del percorso C:\ProgramData\Apple\Lockdown\* ed elimina tutte le cartelle e i file che non dovrebbero trovarsi lì.
Per i test locali, ho usato ProcessHacker2 per riavviare forzatamente il servizio e ispezionare il comportamento del programma.
Il comportamento osservato era che il servizio, in esecuzione come SYSTEM, interroga la directory e tutte le sottodirectory al suo interno, quindi esegue l'operazione CreateFile con l'opzione Delete On Close abilitata. In pratica, il servizio SYSTEM interroga il percorso C:\ProgramData\Apple\Lockdown\* e scorre ricorsivamente le sottocartelle e i file all'interno di quella directory, eliminandoli.
C:\ProgramData\Apple\*Windows Sysinternals https://learn.microsoft.com/en-us/sysinternals/ accesschk64.exe può essere usato per verificare i diritti di accesso su cartelle specifiche.
I membri del gruppo locale "Users" dispongono di permessi di scrittura all'interno della cartella C:\ProgramData\Apple\Lockdown\, il che consente agli utenti con privilegi bassi di scrivere file arbitrari nella cartella.
Dato che possiamo scrivere file arbitrari nel percorso Lockdown e che il processo SYSTEM li eliminerà quando il servizio viene riavviato, è stato possibile creare una primitiva di eliminazione arbitraria di file/cartelle.
Per illustrarlo, creo due sottocartelle all'interno della cartella Lockdown.
La sottocartella a e la sottocartella b all'interno della sottocartella a.
Il risultato sarà questo: C:\ProgramData\Apple\Lockdown\a\b
All'interno della sottocartella a c'è un file di testo chiamato aa.txt, e all'interno della sottocartella b c'è un file di testo chiamato bb.txt
C:\ProgramData\Apple\Lockdown\a\aa.txt
C:\ProgramData\Apple\Lockdown\a\b\bb.txt
Come si può vedere nello screenshot qui sopra, l'operazione "CreateFile" viene eseguita con l'opzione "Delete On Close" su aa.txt, che lo elimina.
Quando il processo SYSTEM esegue l'operazione CreateFile su aa.txt e bb.txt con l'opzione Delete On Close sui file, il processo SYSTEM AppleMobileDeviceService.exe eliminerà i file.
Ora è possibile per noi creare file arbitrari all'interno della cartella Lockdown ed eliminarli, il che ci porta al prossimo trucco interessante.
In Windows è possibile usare le junction NTFS per reindirizzare una cartella verso un'altra posizione. In un certo senso, è simile ai symlink di Linux.
Per illustrarlo, è possibile creare una junction NTFS (symlink) all'interno della cartella C:\ProgramData\Apple\Lockdown che punta a una cartella sul Desktop.
Puoi ottenerla tu stesso usando PowerShell New-Item -Type Junction -Path whatever -Target "C:\Users\user\Desktop\AAyes", oppure usa semplicemente il set di strumenti offerto da ZDI:
Esegui il seguente comando per puntare una junction NTFS all'interno della cartella Lockdown verso la "Destinazione" sul Desktop.
.\FolderContentsDeleteToFolderDelete.exe /target "C:\Users\user\Desktop\AAyes" /initial "C:\ProgramData\Apple\Lockdown"
Quando il servizio viene riavviato, la junction NTFS appena creata punterà a AAyes, situato sul Desktop.
Poiché il servizio esegue l'operazione CreateFile con l'opzione Delete On Close come SYSTEM, il file verrà eliminato.
Poiché l'operazione viene eseguita con privilegi SYSTEM, disponiamo di una primitiva di eliminazione arbitraria di cartelle o file, il che significa che possiamo ottenere l'esecuzione di codice sull'host come SYSTEM.
NOTA: