
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:
È stato necessario apportare alcune modifiche al codice sorgente nel progetto FolderContentsDeleteToFolderDelete a causa di restrizioni sui nomi di file/cartelle. I nomi di file/cartelle dovevano essere molto corti affinché l'eliminazione avvenisse. Il motivo non è noto e non è stato approfondito, poiché i nomi corti hanno risolto il problema in modo affidabile.
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";
Poiché il servizio seguirà ricorsivamente qualsiasi junction (symlink), la tesi era che sarebbe stato possibile eliminare arbitrariamente file sul sistema come SYSTEM usando il vulnerabile servizio Apple, che segue la junction NTFS. Dato che il servizio vulnerabile consente comodamente agli utenti non privilegiati di riavviarlo usando il trucco ("Apps -> App installate -> Apple Mobile Device Support -> Modifica -> Ripara") tramite la GUI di Windows, è possibile innescare l'exploit a piacimento. Una volta riavviato il servizio, esso seguirà la junction NTFS e il comportamento programmato del servizio impone che il servizio elimini i file o le cartelle che l'utente sceglie di puntare.
In altre parole, è l'utente a decidere quali file o cartelle il servizio eliminerà. Poiché viene eseguito come SYSTEM, possiamo eliminare quasi qualsiasi file sul sistema (non i file che richiedono i privilegi di TrustedInstaller).
Questo significa che possiamo costruire con cura una catena di eventi che farà quanto segue:
Il Proof of Concept consiste in 5 passaggi.
.\SetOpLock.exe C:\ProgramData\Apple\Lockdown\
Attiva il riavvio del servizio Apps -> App installate -> Apple Mobile Device Support -> Modifica -> Ripara
Prepara il trucco di rollback MSI
.\FolderOrFileDeleteToSystem.exe
.\FolderContentsDeleteToFolderDelete.exe /target 'C:\Config.Msi' /initial "C:\ProgramData\Apple\Lockdown"
Quando l'oplock viene rilasciato al quinto passaggio, monitoriamo il processo FolderContentsDeleteToFolderDelete per verificare che la junction NTFS sia stata seguita e che Config.MSI, situato in C:, sia stato eliminato correttamente. Poi monitoriamo il processo FolderOrFileDeletionToSystem.exe per verificare di vincere la race condition e che la cartella Config.MSI "maligna" con lo script di rollback modificato venga scritta. Se tutto va per il verso giusto, possiamo premere CTRL+ALT+CANC, aprire il menu Accessibilità nell'angolo in basso a destra e aprire la Tastiera su schermo. Poiché abbiamo sovrascritto HID.DLL in C:\Program Files\Common Files\microsoft shared\ink\HID.DLL usando lo script di rollback maligno, si aprirà una shell CMD come SYSTEM, completando il nostro exploit.
Esecuzione e monitoraggio di FolderContentsDeleteToFolderDelete.exe
Esecuzione e monitoraggio di FolderOrFileDeleteToSystem.exe
Aprire una shell SYSTEM