
BlueStacks-Privilegienerweiterung durch VM-Backdooring
CVEID: CVE-2024-33352
Bluestacks Advisory ID: steht aus
Name des/der betroffenen Produkts/Produkte und Version(en): BlueStacks für Windows (Versionen vor 10.40.1000.502)
Verwundbarkeitstyp: CWE-552: Für externe Parteien zugängliche Dateien oder Verzeichnisse
Zusammenfassung
BlueStacks ist ein Android-Emulator, der das Gast-Android-System in einer virtuellen Maschine ausführt. Da BlueStacks Konfigurationsdateien der virtuellen Maschine in einem weltweit beschreibbaren Verzeichnis speichert und diese über verschiedene OS-Benutzer hinweg teilt, ist es einem unprivilegierten Benutzer möglich, ein Image mit einer Hintertür zu versehen, die anschließend Codeausführung mit den Rechten eines privilegierten Benutzers erlangt.
Beschreibung
Die BlueStacks-Konfiguration wird global im ProgramData-Verzeichnis mit den folgenden ACLs gespeichert:
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
Die (F)-Berechtigung, die „Everyone" zugewiesen ist, bedeutet, dass alle Benutzer den Inhalt vollständig zugreifen und modifizieren können. Dies ermöglicht sowohl die Änderung der virtuellen Laufwerke (Speicher, der von Emulatoren genutzt wird) als auch deren Virtual-Box-Konfigurationsdateien. Das Bearbeiten ersterer gibt dem Angreifer die Möglichkeit, automatisch ausgeführten Code zur zugrunde liegenden virtuellen Maschine hinzuzufügen und so eine Hintertür zu schaffen, die immer dann läuft, wenn ein legitimer Benutzer den Emulator startet. Das Bearbeiten letzterer erlaubt es, die Einstellungen der freigegebenen Verzeichnisse so zu konfigurieren, dass das gesamte C-Laufwerk einbezogen wird, wodurch der Code aus Virtual Box in das Host-Betriebssystem entkommen kann.
Um eine Escape aus der virtuellen Maschine zu ermöglichen, würde der Angreifer die Datei
C:\ProgramData\BlueStacks_nxt\Engine\Nougat32\Nougat32.bstk (oder eine ähnliche Datei für die jeweilige virtuelle
Maschine, die von der BlueStacks-Version des Opfers verwendet wird; verschiedene BlueStacks-Versionen können andere
Android-VMs verwenden) modifizieren und die Zeile
<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"/>
ändern, was vollen Zugriff auf das Windows-Dateisystem (mit Einschränkungen je nach Zugriffsstufe des Benutzers, der
BlueStacks ausführt) über /mnt/windows/BstSharedFolder ermöglicht.
Nach der Konfiguration der freigegebenen Ordner zur Ermöglichung des VM-Escapes muss der Angreifer das Dateisystem des
virtuellen Laufwerks ändern, um Code hinzuzufügen, der ausgeführt wird, wenn er vom privilegierten Benutzer gestartet
wird. Es gibt mehrere Möglichkeiten, dies zu tun, aber der im PoC gezeigte, unkomplizierteste Weg ist die Installation
einer Anwendung, die automatisch über einen BOOT_COMPLETED-Broadcast-Receiver startet.
Der letzte Schritt der Ausnutzung ist die Durchführung des Escapes. Mit Zugriff auf das Dateisystem des Host-Betriebssystems
kann dies erreicht werden, indem eine ausführbare Datei zum AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup
des aktuellen Benutzers hinzugefügt wird. Obwohl die Anwendung keine Möglichkeit hat zu wissen, wer der aktuelle Benutzer
ist, kann sie einfach die Unterverzeichnisse in C:\Users auflisten und versuchen, in alle zu schreiben.
Reproduktion
Abhilfe
Eine neuere Version von BlueStacks installieren.