
Escalation dei privilegi di BlueStacks tramite backdooring della VM
ID CVE: CVE-2024-33352
ID Advisory BlueStacks: in attesa
Nome del/i prodotto/i interessato/i e versione/i: BlueStacks per Windows (versioni precedenti alla 10.40.1000.502)
Tipo di vulnerabilità: CWE-552: File o directory accessibili a soggetti esterni
Sommario
BlueStacks è un emulatore Android che esegue il sistema Android guest all'interno di una macchina virtuale. Poiché BlueStacks memorizza i file di configurazione della macchina virtuale in una directory scrivibile da tutti e li condivide tra diversi utenti del sistema operativo, un utente non privilegiato può inserire una backdoor in un'immagine che otterrebbe poi capacità di esecuzione di codice di un utente privilegiato.
Descrizione
La configurazione di BlueStacks è archiviata globalmente nella directory ProgramData con i seguenti ACL
NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
BUILTIN\Administrators:(I)(OI)(CI)(F)
CREATOR OWNER:(I)(OI)(CI)(IO)(F)
BUILTIN\Users:(I)(OI)(CI)(RX)
BUILTIN\Users:(I)(CI)(WD,AD,WEA,WA)
Successfully processed 1 files; Failed processing 0 files
Il permesso (F) assegnato a Everyone significa che tutti gli utenti possono accedere ai contenuti e modificarli completamente. Ciò consente di modificare sia i drive virtuali (storage usato dagli emulatori) sia i loro file di configurazione di Virtual Box. Modificare i primi offre all'attaccante l'opportunità di aggiungere codice eseguito automaticamente nella macchina virtuale sottostante, creando una backdoor che verrà eseguita ogni volta che un utente legittimo avvia l'emulatore. Modificare i secondi consente di riconfigurare le impostazioni delle directory condivise per includere l'intero drive C, permettendo al codice di fuoriuscire da Virtual Box verso il sistema operativo host.
Per abilitare una fuga dalla macchina virtuale, l'attaccante dovrebbe modificare il file
C:\ProgramData\BlueStacks_nxt\Engine\Nougat32\Nougat32.bstk (o un file simile per la macchina virtuale specifica
usata dalla versione di BlueStacks della vittima; diverse versioni di BlueStacks possono usare altre VM Android)
e modificarlo per cambiare la riga
<SharedFolder name="BstSharedFolder" hostPath="C:\ProgramData\BlueStacks_nxt\Engine\UserData\SharedFolder" writable="true" autoMount="false"/>
in
<SharedFolder name="BstSharedFolder" hostPath="C:\" writable="true" autoMount="false"/>
che consentirà l'accesso completo al filesystem Windows (con restrizioni dipendenti dal livello di accesso dell'utente
che esegue BlueStacks) tramite /mnt/windows/BstSharedFolder.
Dopo aver configurato le cartelle condivise per abilitare la fuga dalla VM, l'attaccante deve modificare il filesystem
del drive virtuale per aggiungere codice che verrà eseguito quando avviato dall'utente privilegiato. Ci sono molteplici modi
per farlo, ma il più semplice dimostrato nella PoC è installare un'applicazione che si avvia automaticamente tramite
l'uso del ricevitore di broadcast BOOT_COMPLETED.
Il passo finale dello sfruttamento è effettuare la fuga. Con l'accesso al filesystem del sistema operativo host, si può ottenere
aggiungendo un file eseguibile alla directory AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup dell'utente corrente.
Sebbene l'applicazione non abbia modo di sapere chi sia l'utente corrente, può semplicemente enumerare le sottodirectory
in C:\Users e tentare di scrivere in tutte.
Riproduzione
Rimedio
Installare una versione più recente di BlueStacks.