
Escalada de privilegios de BlueStacks mediante puerta trasera de la máquina virtual
CVEID: CVE-2024-33352
ID de aviso de Bluestacks: pendiente
Nombre del producto(s) y versión(es) afectados: BlueStacks para Windows (versiones anteriores a 10.40.1000.502)
Tipo de vulnerabilidad: CWE-552: Archivos o directorios accesibles a partes externas
Resumen
BlueStacks es un emulador de Android que ejecuta el sistema Android invitado dentro de una máquina virtual. Debido a que BlueStacks almacena los archivos de configuración de la máquina virtual en un directorio con permisos de escritura mundial y los comparte entre diferentes usuarios del sistema operativo, es posible que un usuario no privilegiado manipule una imagen que luego obtenga capacidades de ejecución de código de un usuario privilegiado.
Descripción
La configuración de BlueStacks se almacena globalmente en el directorio ProgramData con las siguientes 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
El permiso (F) asignado a Everyone significa que todos los usuarios pueden acceder y modificar completamente el contenido. Esto permite modificar tanto las unidades virtuales (almacenamiento utilizado por los emuladores) como sus archivos de configuración de Virtual Box. Editar las primeras le da al atacante la oportunidad de agregar código de ejecución automática a la máquina virtual subyacente, creando una puerta trasera que se ejecutará cada vez que un usuario legítimo inicie el emulador. Editar los segundos permite reconfigurar los ajustes de directorios compartidos para incluir toda la unidad C, permitiendo que el código escape de Virtual Box al sistema operativo anfitrión.
Para habilitar un escape de la máquina virtual, el atacante modificaría el archivo
C:\ProgramData\BlueStacks_nxt\Engine\Nougat32\Nougat32.bstk (o un archivo similar para la máquina virtual específica utilizada por la versión de BlueStacks de la víctima; diferentes versiones de BlueStacks pueden usar otras máquinas virtuales de Android) y lo modificaría para cambiar la línea
<SharedFolder name="BstSharedFolder" hostPath="C:\ProgramData\BlueStacks_nxt\Engine\UserData\SharedFolder" writable="true" autoMount="false"/>
a
<SharedFolder name="BstSharedFolder" hostPath="C:\" writable="true" autoMount="false"/>
lo que permitirá acceso completo al sistema de archivos de Windows (con restricciones dependiendo del nivel de acceso del usuario que ejecuta BlueStacks) a través de /mnt/windows/BstSharedFolder.
Después de configurar las carpetas compartidas para habilitar el escape de la VM, el atacante necesita modificar el sistema de archivos de la unidad virtual para agregar código que se ejecutará cuando el usuario privilegiado lo ejecute. Hay múltiples formas de hacer esto, pero la más directa demostrada en el PoC es instalar una aplicación que se inicie automáticamente mediante el uso del receptor de difusión BOOT_COMPLETED.
El último paso de la explotación es realizar el escape. Con acceso al sistema de archivos del sistema operativo anfitrión, se puede lograr añadiendo un archivo ejecutable al AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup del usuario actual. Si bien la aplicación no tiene forma de saber quién es el usuario actual, simplemente puede enumerar los subdirectorios en C:\Users e intentar escribir en todos ellos.
Reproducción
Remedio
Instale una versión más reciente de BlueStacks.