
Escalade de privilèges de BlueStacks via backdooring de VM
CVEID : CVE-2024-33352
Bluestacks Advisory ID : en attente
Nom du ou des produits concernés et version(s) : BlueStacks for Windows (versions antérieures à 10.40.1000.502)
Type de vulnérabilité : CWE-552: Fichiers ou répertoires accessibles à des parties externes
Résumé
BlueStacks est un émulateur Android qui exécute le système Android invité au sein d'une machine virtuelle. BlueStacks stockant les fichiers de configuration de la machine virtuelle dans un répertoire accessible en écriture à tous et les partageant entre différents utilisateurs du système d'exploitation, il est possible pour un utilisateur non privilégié de backdoorer une image qui obtiendrait ensuite des capacités d'exécution de code d'un utilisateur privilégié.
Description
La configuration de BlueStacks est stockée globalement dans le répertoire ProgramData avec les ACL suivants :
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
L'autorisation (F) attribuée à Tout le monde signifie que tous les utilisateurs peuvent accéder et modifier le contenu intégralement. Cela permet de modifier à la fois les disques virtuels (stockage utilisé par les émulateurs) et leurs fichiers de configuration Virtual Box. Modifier les premiers offre à l'attaquant la possibilité d'ajouter du code exécuté automatiquement dans la machine virtuelle sous-jacente, créant une porte dérobée qui sera exécutée lorsqu'un utilisateur légitime démarrera l'émulateur. Modifier les seconds permet de reconfigurer les paramètres des dossiers partagés pour inclure l'intégralité du disque C, permettant ainsi au code de s'échapper de Virtual Box vers le système d'exploitation hôte.
Pour permettre une évasion de la machine virtuelle, l'attaquant modifie le fichier
C:\ProgramData\BlueStacks_nxt\Engine\Nougat32\Nougat32.bstk (ou un fichier similaire pour la machine virtuelle spécifique utilisée par la version de BlueStacks de la victime ; différentes versions de BlueStacks peuvent utiliser d'autres VM Android) et le modifie pour remplacer la ligne
<SharedFolder name="BstSharedFolder" hostPath="C:\ProgramData\BlueStacks_nxt\Engine\UserData\SharedFolder" writable="true" autoMount="false"/>
par
<SharedFolder name="BstSharedFolder" hostPath="C:\" writable="true" autoMount="false"/>
ce qui donnera un accès complet au système de fichiers Windows (avec des restrictions selon le niveau d'accès de l'utilisateur exécutant BlueStacks) via /mnt/windows/BstSharedFolder.
Après avoir configuré les dossiers partagés pour permettre l'évasion de la VM, l'attaquant doit modifier le système de fichiers du disque virtuel pour y ajouter le code qui sera exécuté par l'utilisateur privilégié. Il existe plusieurs façons de procéder, mais la plus simple démontrée dans la preuve de concept consiste à installer une application qui se lance automatiquement via le récepteur de diffusion BOOT_COMPLETED.
La dernière étape de l'exploitation consiste à réaliser l'évasion. Avec l'accès au système de fichiers du système d'exploitation hôte, cela peut être accompli en ajoutant un fichier exécutable dans le dossier AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup de l'utilisateur courant. Bien que l'application n'ait aucun moyen de connaître l'utilisateur actuel, elle peut simplement énumérer les sous-répertoires de C:\Users et tenter d'écrire dans chacun d'eux.
Reproduction
Correction
Installer une version plus récente de BlueStacks.