
VMバックドアリングを介したBlueStacksの権限昇格
CVE ID: CVE-2024-33352
Bluestacks アドバイザリ ID: 保留中
影響を受ける製品名とバージョン: BlueStacks for Windows (versions prior to 10.40.1000.502)
脆弱性タイプ: CWE-552: 外部者がアクセス可能なファイルまたはディレクトリ
概要
BlueStacks は、仮想マシン内でゲスト Android システムを実行する Android エミュレータです。BlueStacks は仮想マシン設定ファイルを誰でも書き込み可能なディレクトリに保存し、OS の異なるユーザー間で共有するため、非特権ユーザーがイメージにバックドアを仕込み、その後、特権ユーザーのコード実行能力を獲得することが可能です。
説明
BlueStacks の設定は、以下の ACL を持つ ProgramData ディレクトリにグローバルに保存されます。
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 からホスト OS にエスケープできるようになります。
仮想マシンのエスケープを可能にするために、攻撃者はファイルを変更します。
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 をインストールしてください。