VMware XHCI uninitialized memory info leak (CVE-2017-4905)¶
VMware'in ESXi/Workstation/Fusion XHCI ile ilgili host kodundaki uninitialized memory, stale host stack içeriğini guest'e geri sızdırır ve privileged
vmware-vmxmemory'sini açığa çıkarır (ASLR'yi yenen bir infoleak).
Mechanism¶
Boundary neden kırılıyor
VMware, bir virtual XHCI (USB 3.0) controller'ı ve ilişkili bir "backdoor"
guest-host iletişim kanalını tamamen host vmware-vmx process'i içinde emüle
eder. Host belirli request'leri işlerken, içeriğini guest'e geri kopyalamadan
önce tamamen initialize etmesi beklenen bir stack buffer allocate eder.
Kusur: bir error/invalid-command path'inde buffer temizlenmez, böylece host
stack'inde halihazırda bulunan stale byte'lar (return adresleri, pointer'lar,
önceki local'lar) ne ise guest tarafından okunabilir memory'ye kopyalanır.
Aşılan invariant klasik CWE-908 kuralıdır: daha düşük yetkili bir domain'e
döndürülen memory, kullanılmadan önce initialize edilmelidir. Sızan byte'lar
host code/stack pointer'larını içerdiği için, guest vmware-vmx'in load
adresini türetebilir ve host ASLR'yi yener. VMware'in kendi advisory metni
kısadır: "ESXi, Workstation, and Fusion have uninitialized memory usage. This
issue may lead to an information leak."
Walkthrough¶
Public Keen Lab "A bunch of Red Pills" writeup'ından ve VMSA-2017-0006'dan kavramsal yeniden kurgu. Yalnızca fragment'ler ve mantık — weaponize edilmiş bir chain değil.
Patch'lenmiş / tarihsel
2017'de düzeltildi (VMSA-2017-0006). Bu kayıt, bug sınıfının anlaşılması ve detection'ı içindir; desteklenen build'lerde yeniden üretim için değil.
-
Guest software, host'un stack'inde bir response buffer allocate etmesine neden olan request'leri emüle controller'a / backdoor kanalına gönderir.
-
Guest, host'un error path'ini alması için bir geçersiz/desteklenmeyen komut gönderir. O path'te callback, data döndürmeden önce "buffer'ı düzgün temizlemekte başarısız olur."
-
Host, uninitialized stack buffer'ını guest-visible memory'ye geri kopyalar; guest ondan stale host pointer'larını okur.
Leak'in public açıklaması
Keen Lab analizine göre: "A buffer will be allocated on the stack when processing the backdoor requests. This buffer should be initialized ... But when requesting invalid commands, the callback fails to properly clear the buffer, causing the uninitialized content of the stack buffer to be leaked to the guest" — eşlenmiş Pwn2Own 2017 escape'inin leak yarısı olarak kullanılan bir host-ASLR defeat'ini mümkün kılar (write primitive'i CVE-2017-4904'tür).
Detection¶
- Host-side: Crash beklenmez — bir infoleak tasarımı gereği sessizdir. Bunun
yerine anormal guest request paternlerini arayın: error path'i çalıştıran
tekrarlayan geçersiz/desteklenmeyen backdoor veya XHCI komutları,
vmware.logiçinde USB/XHCI device aktivitesiyle korele. - Pairing sinyali: Bir infoleak genellikle bir write/RCE girişiminin
habercisidir; malformed XHCI/USB request'lerinden oluşan bir patlamanın hemen
ardından gelen bir
vmware-vmxcrash, leak-then-exploit'e işaret eder (bkz. CVE-2017-4904). - Telemetry: VMware backdoor interface'ini malformed komutlarla döven guest process'leri normal workload'lar için anormaldir.
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. VMware patch'lemekten başka workaround listelemiyor.
- Config hardening: Emüle-device attack surface'ini küçültmek için ihtiyaç duymayan guest'lerden virtual USB 3.0 / XHCI controller'ı kaldırın.
- Defense in depth: Guest'leri untrusted olarak ele alın; memory-disclosure
primitive'leri escape'lere zincirlenemesin diye host
vmware-vmx'i güncel tutun.