
VM 백도어링을 통한 BlueStacks 권한 상승
CVEID: CVE-2024-33352
Bluestacks Advisory ID: 대기 중
영향을 받는 제품 및 버전의 이름: BlueStacks for Windows (10.40.1000.502 이전 버전)
취약점 유형: CWE-552: 외부 당사자가 접근할 수 있는 파일 또는 디렉터리
요약
BlueStacks는 가상 머신 내에서 게스트 Android 시스템을 실행하는 Android 에뮬레이터입니다. BlueStacks는 가상 머신 구성 파일을 모든 사용자가 쓰기 가능한 디렉터리에 저장하고 이를 서로 다른 OS 사용자 간에 공유하므로, 권한이 없는 사용자가 이미지에 백도어를 심어 이후 권한 있는 사용자의 코드 실행 권한을 획득할 수 있습니다.
설명
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 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"/>
이렇게 하면 /mnt/windows/BstSharedFolder를 통해 Windows 파일 시스템(BlueStacks를 실행하는 사용자의 접근 수준에 따라 제한이 적용됨)에 대한 전체 접근이 가능해집니다.
공유 폴더를 구성하여 VM 탈출을 활성화한 후, 공격자는 권한 있는 사용자가 실행할 때 실행될 코드를 추가하기 위해 가상 드라이브의 파일 시스템을 수정해야 합니다. 이를 수행하는 방법은 여러 가지가 있지만, PoC에서 시연된 가장 간단한 방법은 BOOT_COMPLETED 브로드캐스트 수신기를 통해 자동으로 시작되는 응용 프로그램을 설치하는 것입니다.
악용의 마지막 단계는 탈출을 수행하는 것입니다. 호스트 OS 파일 시스템에 접근할 수 있게 되면, 현재 사용자의 AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup에 실행 파일을 추가하여 이를 달성할 수 있습니다. 응용 프로그램은 현재 사용자가 누구인지 알 수 있는 방법이 없지만, C:\Users의 하위 디렉터리를 열거하고 모든 디렉터리에 쓰기를 시도하면 됩니다.
재현
해결 방법
최신 버전의 BlueStacks를 설치합니다.