Skip to content

VMware SVGA3D / guestrpc guest-to-host escape class (RWCTF 2018 Station-Escape; SVGA3D CVE-2017-4902/4903)

Genel VMware SVGA3D / guestrpc guest-to-host escape sınıfı: bir guest, virtual GPU command pipeline'ını (ya da guestrpc/backdoor kanalını) öyle sürer ki validate edilmemiş state host vmware-vmx belleğini bozar, binary'yi leak eder ve bir host function pointer'ını hijack eder — Real World CTF 2018 "Station-Escape" heap-overflow zincirinin örneklediği gibi.

Mechanism

Note

Bir type-2 VMware hypervisor'ü, SVGA display/3D adapter'ını ve bir guest↔host RPC kanalını (guestrpc/backdoor) host'taki vmware-vmx user-space process'i içinde emüle eder. İzolasyon invariant'ı, guest'in sağladığı tüm state'in — SVGA3D command/surface parametreleri ve guestrpc message length'leri — host harekete geçmeden önce validate edilmesi gerektiğidir. Bu bug sınıfı bunu kırar: Station-Escape zincirinde guestrpc info-set, guest'in host heap'inde keyfi boyutta veri saklamasına izin verir ve reply-buffer handling'indeki bir hata, host reply buffer'ının kontrollü bir double-free → use-after-free'sine olanak tanır; tcache-tarzı allocation sonra bir chunk'ı bir host function pointer'ının üzerine yerleştirir. Sonuç bir guest → host primitive'dir: ASLR'yi yenmek için vmware-vmx text'ini leak et, sonra rip/rdi kontrolünü ele geçir.

Warning

CVE atıf uyarısı: öğe başlığı CVE-2017-4901'i listeler, ama o CVE VMware'in drag-and-drop (DnD) out-of-bounds bug'ıdır (VMSA-2017-0005), bir SVGA3D rendering bug'ı değildir. O döneme ait SVGA3D guest-to-host örnekleri CVE-2017-4902/4903'tür (Pwn2Own 2017, VMSA-2017-0006). Bu kayıt SVGA3D/guestrpc escape sınıfını belgeler; spesifik CVE-to-component eşlemesini başlığa göre değil, atıfta bulunulan advisory'lere göre ele al.

Bu, Cloudburst'ün modern halefi ve SVGA II modern shader exploitation için substrate'dir.

Walkthrough

Public, patch'lenmiş materyal (nafod "Station-Escape" write-up'ı; VMSA-2017-0006). Atıfta bulunulan kaynaktan konsept yolu:

  1. Bir guestrpc kanalı aç; host vCPU heap'inde kontrollü boyutta kontrollü veri stoklamak için info-set kullan (heap grooming).
  2. Reply-buffer mishandling'ini tetikle ki izlenen offset'teki buffer iki kez free edilsin (GUESTRPC_CLOSE artı buggy yol) → kontrollü UAF.
  3. Bir function-pointer taşıyan object'in üzerine reallocate et; önce vmware-vmx text'ini leak et, sonra bir chunk'ı öyle yerleştir ki bir call saldırganın kontrol ettiği state üzerinden geçsin.
  4. rip/rdi kontrolünü ele geçir ve bir host program'ı çağır.

Gözlemlenebilir: başarısız bir denemede vmware-vmx crash'i; anormal guestrpc/SVGA command dizileri.

Warning

Patch'lenmiş/tarihsel; yalnızca konseptsel reprodüksiyon — exploit offset'i, grooming reçetesi ya da shellcode yok.

Detection

  • Host: olağandışı guestrpc/SVGA aktivitesiyle ilişkili vmware-vmx crash'leri.
  • Davranış: out-of-range SVGA geometry ya da anormal guestrpc info-set boyutları gönderen bir guest, normal driver'lar için anormaldir.

Mitigation

  • İlgili VMware advisory'lerini uygula (DnD CVE-2017-4901 için VMSA-2017-0005; SVGA3D CVE'leri için VMSA-2017-0006) ve güncel kal.
  • Gerekmeyen yerlerde 3D acceleration / drag-and-drop / copy-paste'i disable et.
  • Device-emulation process'ini sandbox'la ve least-privilege uygula ki bir VMX compromise'i tam host kontrolü olmasın.

References