VMware virtual sound device use-after-free guest-to-host RCE (CVE-2019-5527)¶
VMware'in emüle ettiği virtual sound device'ındaki bir use-after-free, non-administrative erişimi olan bir guest'in free edilmiş bir host object'ini yeniden kullanıma sürmesine izin verir ve host VMX process'inde code execution verir.
Mechanism¶
Bug sınıfı: guest'in kontrol ettiği device object lifecycle'ı üzerinde use-after-free
ESXi, Workstation, Fusion, VMRC ve Horizon Client genelinde paylaşılan virtual sound device, tamamen host VMX userworld'ünde emüle edilir. Guest, device'ı MMIO/port register'ları ve DMA buffer'ları üzerinden programlar ve bu register write'ları host taraflı object'leri (buffer'lar, stream/DMA descriptor'ları, callback context'leri) allocate eden, reference'layan ve free eden bir state machine'i sürer.
Security boundary aşılır çünkü emulator'ın bir object'in yaşam süresine dair kavrayışı guest input'uyla sürülür. Bir guest, host'un bir object'i ona bir pointer hâlâ tutulurken (dangling reference) free etmesine yol açan bir operation dizisi gönderebilir, sonra o stale pointer'ı dereference eden sonraki bir operation'ı tetikleyebilir. Free ile stale kullanım arasında, guest host allocator'ın aynı chunk'ı geri vermesine ve onu saldırganın etkilediği içerikle tohumlamasına yol açabilir — geçersiz bir dereference'ı kontrollü bir read/write ya da kontrollü bir indirect call'a çevirir.
İhlal edilen invariant, bir host object'inin ona her reference süresince exclusive ownership'i ve geçerliliğidir. Object teardown'ını guest'in gönderdiği bir reset/reconfigure'a bağlayan emüle device'lar, başka bir guest yolu hâlâ eski handle'ı tutarken ya da onunla re-enter ederken, bu UAF sınıfını tekrar tekrar üretir. Free edilen object ister bir DMA buffer, ister bir stream descriptor, isterse bir function-pointer taşıyan context olsun aynı kök nedendir.
Walkthrough¶
Warning
Tarihsel ve patch'lenmiş (VMSA-2019-0014, 2019). Aşağıdaki, public CVE/advisory'den konseptsel bir yeniden kurgudur. Offset'ler, struct layout'ları, allocator-grooming reçetesi ya da exploit kodu verilmemiştir.
- Guest, emüle sound device için bir driver yükler ve host taraflı stream/buffer state'ini allocate etmek için control register'larını programlar.
- Guest'in gönderdiği bir reconfigure, reset ya da teardown, host emulator'ının o object'lerden birini, ona bir reference device state'inde başka bir yerde hayatta kalırken free etmesine yol açar.
- Guest host VMX heap'ini öyle groom eder ki free edilen chunk reallocate edilir ve saldırganın seçtiği byte'larla (sahte bir object / overwrite edilmiş vtable ya da length alanı) doldurulur.
- Sonraki bir device operation dangling reference'ı takip eder ve saldırganın şekillendirdiği reallocate edilmiş bellek üzerinde işlem yapar — use-after-free — bir read/write primitive'i elde etmek ya da host process'inde control flow'u hijack etmek için.
Konseptsel lifecycle bug'ı (yalnızca açıklayıcı)
Yalnızca free-with-retained-reference pattern'i load-bearing'dir; somut alanlar ve boyutlar kasıtlı olarak atlanmıştır.Detection¶
- VMX crash'leri / core dump'ları: guest sound-device aktivitesiyle korele
olan,
vmware.log'takivmware-vmxpanic'leri ya da segfault'ları (Backtrace/CoreDump/MonitorPanic) birincil host taraflı sinyaldir; başarısız exploitation tipik olarak poison'lanmış/free edilmiş bir pointer'da fault verir. - ESXi vmkernel log'ları: belirli bir VM için sporadik
vmxuserworld sonlanmaları ya da ZDUMP'lar, sıklıkla kümelenmiş (saldırgan groom eder ve yeniden dener). - Davranışsal sinyal: audio device üzerinde hızlı allocate/reset/reconfigure döngüleri gerçekleştiren bir guest ya da meşru audio workload'u olmayan bir context'ten ağır audio-buffer churn'ü anormaldir.
- EDR / host telemetry: tekrarlayan VM başına
vmware-vmxrestart'ları ve VM'in dizini altında beliren yeni core dump dosyaları.
Mitigation¶
- VMSA-2019-0014'ten düzeltilmiş build'lere patch'le:
- Workstation 15.x: 15.5.0
- Fusion 11.x: 11.5.0
- VMware Remote Console (VMRC): 10.0.5
- Horizon Client: 5.2.0
- ESXi 6.0 / 6.5 / 6.7: karşılık gelen 2019 ESXi patch build'leri.
- Attack surface'i azalt: audio'nun gerekmediği VM konfigürasyonlarından virtual sound device'ı kaldır ki vulnerable emulation yolu guest'e asla exposed olmasın.
- OS/compiler savunması: kalıcı düzeltme sınıfı, free'de tüm reference'ları null'lamak, paylaşılan device object'lerini refcount'lamak ve device state'ini atomik olarak reset etmektir; host taraflı heap hardening (quarantine/allocator randomization) free edilen chunk'ı groom etmenin maliyetini yükseltir.