
Escalada de privilégio no BlueStacks através de backdoor em VM
CVEID: CVE-2024-33352
ID do Aviso da BlueStacks: pendente
Nome do(s) produto(s) e versão(ões) afetados: BlueStacks for Windows (versões anteriores a 10.40.1000.502)
Tipo de vulnerabilidade: CWE-552: Arquivos ou Diretórios Acessíveis a Partes Externas
Resumo
BlueStacks é um emulador Android que executa o sistema Android convidado dentro de uma máquina virtual. Como o BlueStacks armazena arquivos de configuração da máquina virtual em um diretório gravável por todos e os compartilha entre diferentes usuários do SO, é possível que um usuário não privilegiado insira uma backdoor em uma imagem que então obteria capacidades de execução de código de um usuário privilegiado.
Descrição
A configuração do BlueStacks é armazenada globalmente no diretório ProgramData com as seguintes ACLs
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
A permissão (F) atribuída a Everyone significa que todos os usuários podem acessar e modificar completamente o conteúdo. Isso permite modificar tanto as unidades virtuais (armazenamento usado pelos emuladores) quanto seus arquivos de configuração do Virtual Box. Editar o primeiro dá ao atacante a oportunidade de adicionar código executado automaticamente à máquina virtual subjacente, criando uma backdoor que será executada sempre que um usuário legítimo iniciar o emulador. Editar o segundo permite reconfigurar as configurações de diretório compartilhado para incluir toda a unidade C, permitindo que o código escape do Virtual Box para o sistema operacional host.
Para permitir uma fuga da máquina virtual, o atacante modificaria o arquivo
C:\ProgramData\BlueStacks_nxt\Engine\Nougat32\Nougat32.bstk (ou um arquivo similar para a máquina virtual específica usada pela versão do BlueStacks da vítima; diferentes versões do BlueStacks podem usar outras VMs Android)
e o modificaria para alterar a linha
<SharedFolder name="BstSharedFolder" hostPath="C:\ProgramData\BlueStacks_nxt\Engine\UserData\SharedFolder" writable="true" autoMount="false"/>
para
<SharedFolder name="BstSharedFolder" hostPath="C:\" writable="true" autoMount="false"/>
o que permitirá acesso completo ao sistema de arquivos do Windows (com restrições dependendo do nível de acesso do usuário que executa o BlueStacks) através de /mnt/windows/BstSharedFolder.
Após configurar as pastas compartilhadas para permitir a fuga da VM, o atacante precisa modificar o sistema de arquivos da unidade virtual para adicionar código que será executado quando executado pelo usuário privilegiado. Existem várias maneiras de fazer isso, mas a mais direta demonstrada no PoC é instalando um aplicativo que inicia automaticamente através do uso do receptor de broadcast BOOT_COMPLETED.
A etapa final da exploração é realizar a fuga. Com acesso ao sistema de arquivos do SO host, isso pode ser alcançado adicionando um arquivo executável ao diretório AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup do usuário atual. Embora o aplicativo não tenha como saber quem é o usuário atual, ele pode simplesmente enumerar os subdiretórios em C:\Users e tentar escrever em todos eles.
Reprodução
Remediação
Instale uma versão mais recente do BlueStacks.