Skip to content

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

  1. Guest software, host'un stack'inde bir response buffer allocate etmesine neden olan request'leri emüle controller'a / backdoor kanalına gönderir.

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

  3. 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.log iç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-vmx crash, 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.

References