CVEID:CVE-2024-33352
Bluestacks 公告 ID:待定
受影响产品及版本名称: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
分配给 Everyone 的 (F) 权限意味着所有用户都可以完全访问和修改其中的内容。这允许修改虚拟磁盘(模拟器使用的存储)及其 Virtual Box 配置文件。修改前者使攻击者有机会向底层虚拟机添加自动执行的代码,从而创建一个后门,当合法用户启动模拟器时该后门就会运行。修改后者则可以重新配置共享目录设置,使其包含整个 C 盘,从而允许代码从 Virtual Box 逃逸到宿主操作系统中。
为了实现虚拟机逃逸,攻击者会修改文件
C:\ProgramData\BlueStacks_nxt\Engine\Nougat32\Nougat32.bstk(或针对受害者 BlueStacks 版本所用的特定虚拟机的类似文件;不同 BlueStacks 版本可能使用其他 Android 虚拟机),并将其中的一行
<SharedFolder name="BstSharedFolder" hostPath="C:\ProgramData\BlueStacks_nxt\Engine\UserData\SharedFolder" writable="true" autoMount="false"/>
修改为
<SharedFolder name="BstSharedFolder" hostPath="C:\" writable="true" autoMount="false"/>
这将允许通过 /mnt/windows/BstSharedFolder 完全访问 Windows 文件系统(具体限制取决于运行 BlueStacks 用户的访问级别)。
配置共享文件夹以启用虚拟机逃逸后,攻击者需要修改虚拟磁盘的文件系统,添加在特权用户运行时将被执行的代码。实现此目的的方法有多种,但 PoC 中演示的最直接方法是通过使用 BOOT_COMPLETED 广播接收器安装一个自动启动的应用程序。
利用的最后一步是执行逃逸。一旦能够访问宿主操作系统文件系统,可以通过向当前用户的 AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup 目录添加可执行文件来实现。虽然应用程序无法知道当前用户是谁,但它可以直接枚举 C:\Users 中的子目录并尝试向所有子目录写入。
复现步骤
修复方案
安装更新版本的 BlueStacks。