Skip to content

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-vmx process'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.

  1. 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.

  2. 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.

  3. 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.log içinde guest XHCI/USB Device Context programlamasıyla korele vmware-vmx crash'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.

References