VMware XHCI uninitialized stack ACE Pwn2Own escape (CVE-2017-4904)¶
VMware'in emüle ettiği XHCI controller'daki bir uninitialized stack variable, host
vmware-vmxprocess'inde bir write-what-where primitive'ine dönüşür ve guest-to-host arbitrary code execution sağlar (Pwn2Own 2017 VMware escape'inin RCE yarısı).
Mechanism¶
Boundary neden kırılıyor
ESXi/Workstation/Fusion'daki virtual XHCI (USB 3.0) controller, host
vmware-vmx process'inde çalışır. Controller Device Context değişikliklerini
commit ederken, Device Context'i tutan guest physical memory'yi monitor'ün adres
uzayına map'ler ve ona yazar. Kusur: o mapping başarısız olabilir ve bir
result/destination variable'ını stack'te uninitialized bırakır; kod ardından
"result'ı doğrudan memory yazma için bir destination adresi olarak kullanır."
Stale stack değeri (ve yazılan data) guest-controlled Input/Endpoint Context
field'ları üzerinden etkilenebildiği için, bir attacker nereye ve neyin
yazıldığını yönlendirir — host memory'de bir write-what-where primitive (CWE-908
uninitialized memory → arbitrary write). Aşılan invariant: hatalı olabilen bir
mapping'den türetilen bir destination pointer, bir host-side write için
dereference edilmeden önce validate edilmelidir.
Walkthrough¶
VMSA-2017-0006, ZDI-17-239 ve public Keen Lab Pwn2Own 2017 writeup'ından kavramsal yeniden kurgu. Yalnızca mantık — offset, gadget veya copy-paste kod yok.
Patch'lenmiş / tarihsel
Pwn2Own 2017'de gösterildi ve aynı yıl düzeltildi (VMSA-2017-0006). ESXi 5.5'te etki bir guest denial of service'e indirgendi. Burada savunmacı anlayışı için sunulmuştur, yeniden üretim için değil.
-
Guest, host ASLR'yi yenmek ve
vmware-vmx'in nereye yüklendiğini öğrenmek için bu bug'ı bir infoleak (CVE-2017-4905) ile eşler. -
Guest, emüle XHCI controller'ın Device Context yapılarını programlar ve guest-memory mapping'i başarısız olan bir Device-Context update sürer; host'un destination variable'ını uninitialized bırakır.
-
Host, o uninitialized pointer üzerinden attacker tarafından etkilenen data yazar (write-what-where) ve seçilmiş bir host object'ini bozarak control flow'u yeniden yönlendirir → "hypervisor bağlamında" arbitrary code execution.
Public root-cause ifadesi
Keen Lab: "the mapping could fail and leave the result variable untouched ... the code directly uses the result as a destination address for memory writing, resulting an uninitialized variable vulnerability." ZDI-17-239: "The issue results from the lack of proper initialization of memory prior to accessing it. An attacker can leverage this vulnerability to elevate privileges and execute arbitrary code under the context of the hypervisor."
Detection¶
- Host-side:
vmware.logiçinde guest XHCI/USB Device Context programlamasıyla korelevmware-vmxcrash'i (beklenmeyen/çöp bir adrese yazmada access violation). Heap/stack guard page'leri ya da allocator integrity check'leri wild write'ı flag'leyebilir. - Behavioral: XHCI Device/Input/Endpoint Context'lerini malformed şekillerde programlayan bir guest, özellikle bir infoleak patlamasından hemen sonra, anormaldir.
- Chaining sinyali: Crash'ten hemen önce bir infoleak (CVE-2017-4905 tarzı malformed backdoor trafiği) arayın — klasik leak-then-write escape dizisi.
Mitigation¶
- Patch: VMSA-2017-0006'yı uygulayın. Düzeltilmiş build'ler: Workstation 12.5.5, Fusion 8.5.6, ESXi 6.5 = ESXi650-201703410-SG, ESXi 6.0 U3 = ESXi600-201703401-SG, ESXi 5.5 = ESXi550-201703401-SG. Patch'lemekten başka workaround listelenmiyor.
- Config hardening: İhtiyaç duymayan guest'lerden virtual USB 3.0 / XHCI controller'ı kaldırın; vulnerable Device-Context path'ini ortadan kaldırır.
- Defense in depth: Host'ları patch'li tutun; böylece eşlenmiş infoleak (CVE-2017-4905) bu write primitive'inin dayandığı ASLR defeat'ini sağlayamaz.