
Повышение привилегий в BlueStacks через бэкдор в виртуальной машине
Идентификатор CVE: CVE-2024-33352
Идентификатор консультации Bluestacks: ожидается
Название(-я) затронутого(-ых) продукта(-ов) и версия(-и): BlueStacks for Windows (версии до 10.40.1000.502)
Тип уязвимости: CWE-552: Файлы или каталоги, доступные для внешних сторон
Краткое описание
BlueStacks — это Android-эмулятор, запускающий гостевую Android-систему внутри виртуальной машины. Поскольку BlueStacks хранит файлы конфигурации виртуальной машины в общедоступном для записи каталоге и делает их общими для разных пользователей ОС, непривилегированный пользователь может внедрить бэкдор в образ, который затем получит возможность выполнения кода с привилегиями привилегированного пользователя.
Описание
Конфигурация BlueStacks хранится глобально в каталоге ProgramData со следующими 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
Разрешение (F), назначенное Everyone, означает, что все пользователи могут полностью получить доступ и изменять содержимое. Это позволяет изменять как виртуальные диски (хранилище, используемое эмуляторами), так и их конфигурационные файлы Virtual Box. Редактируя первые, атакующий получает возможность добавить автоматически выполняемый код в базовую виртуальную машину, создавая бэкдор, который будет запускаться при каждом запуске эмулятора легитимным пользователем. Редактируя файлы конфигурации, атакующий может перенастроить настройки общих папок, чтобы включить весь диск C, что позволит коду выйти за пределы Virtual Box на хост-операционную систему.
Чтобы осуществить побег из виртуальной машины, атакующий изменяет файл
C:\ProgramData\BlueStacks_nxt\Engine\Nougat32\Nougat32.bstk (или аналогичный файл для конкретной виртуальной
машины, используемой версией Bluestacks жертвы; разные версии BlueStacks могут использовать другие Android VM)
и меняет строку
<SharedFolder name="BstSharedFolder" hostPath="C:\ProgramData\BlueStacks_nxt\Engine\UserData\SharedFolder" writable="true" autoMount="false"/>
на
<SharedFolder name="BstSharedFolder" hostPath="C:\" writable="true" autoMount="false"/>
что предоставит полный доступ к файловой системе Windows (с ограничениями в зависимости от уровня доступа пользователя,
запускающего BlueStacks) через /mnt/windows/BstSharedFolder.
После настройки общих папок для обеспечения побега из VM атакующему необходимо изменить файловую систему виртуального диска,
чтобы добавить код, который будет выполнен при запуске привилегированным пользователем. Существует несколько способов это сделать,
но самый простой, продемонстрированный в PoC, — установка приложения, которое запускается автоматически
с помощью широковещательного получателя BOOT_COMPLETED.
Финальный шаг эксплуатации — выполнение побега. Имея доступ к файловой системе хост-ОС, это можно осуществить,
добавив исполняемый файл в AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup текущего пользователя.
Хотя приложение не может узнать, кто является текущим пользователем, оно может просто перечислить подкаталоги
в C:\Users и попытаться записать во все из них.
Воспроизведение
Исправление
Установите более новую версию BlueStacks.