Skip to content

VMware XHCI USB use-after-free Tianfu Cup escape (CVE-2020-4004)

VMware'in emüle edilen XHCI (USB 3.x) controller'ında Tianfu Cup 2020'de gösterilen kritik bir use-after-free; bir guest'in host vmware-vmx process'i olarak code çalıştırmasına izin verir (VMSA-2020-0026).

Mechanism

Note

VMware'in XHCI (USB 3.x) host controller'ı VM-başına host vmware-vmx process'i içinde emüle edilir. Guest, controller'ı MMIO üzerinden yapılandırır ve guest memory'sinde ring veri yapıları ile device/slot context object'leri kurar; host backend ise lifetime'ı guest-yönlendirmeli bir device lifecycle'ını (attach, enable slot, configure endpoint, disable / reset / detach) takip eden karşılık gelen slot/endpoint object'lerini ve transfer buffer'larını takip eder.

İhlal edilen invariant host üzerindeki object-lifetime güvenliğidir: host tarafındaki bir object guest-tetiklemeli bir geçişle free edilirken ona ait bir pointer başka bir geçişte erişilebilir kalır ve sonradan dereference edilir. Guest bu geçişlerin sırasını ve zamanını kontrol ettiği için dangling bir reference üretebilir ve free-sonrası bir dereference'a zorlayabilir — bir use-after-free. Free edilen chunk'ı neyin yeniden doldurduğunu kontrol etmek, bug'ı attacker-etkili host davranışına dönüştürür.

Bu, VMware'in herkese açık olarak açıklanan XHCI UAF'larının en erkenidir (ardından CVE-2021-22040 ve CVE-2024-22252 gelir) ve emulated-USB device-backend sınıfını UHCI controller bug'ı ile paylaşır. Bu üçü aynı bug sınıfını paylaşsa da ayrı CVE'lerdir: bu kayıt CVE-2020-4004'ü (VMSA-2020-0026) belgeler ve sibling'lerinden farklı bir advisory, yıl ve patch build setine sahiptir — birleştirilmemelidirler.

Walkthrough

Public advisory'den (VMSA-2020-0026) kavramsal reprodüksiyon. 2020 Tianfu Cup'ta raporlandı. Host offset'i, struct field'ı, gadget zinciri veya exploit verilmemiştir.

  1. Guest'te, sanal XHCI controller'ı normal device-attach ve slot/endpoint yapılandırmasından geçir ki host takip object'lerini allocate etsin.
  2. Bu object'lerden birini, ona ait bayat (stale) bir reference başka bir yerde hayatta kalırken free eden bir teardown / disable / reset path'ini tetikle.
  3. Guest operasyonlarını sırala ki bayat reference free'den sonra kullanılsın.
  4. Free edilen allocation'ı (heap grooming) kontrollü veriyle yeniden doldur ve dangling dereference'ı vmware-vmx olarak host code execution'a yönlendir.

Warning

Patch'lenmiş / tarihsel. ESXi'de etki VMX sandbox'ı içinde sınırlıdır; Workstation/Fusion'da host OS'a ulaşabilir. Yalnızca bug sınıfı için belgelenmiştir — burada silah haline getirilmiş layout veya shellcode yok. CVE-2020-4005 (aynı VMSA-2020-0026'daki ayrı bir ESXi privilege-escalation bug'ı), bu UAF ile zincirleme için olası bir partner olarak yaygın biçimde anılır; kesin 4004+4005 zincir anlatımı burada cited source'lardan bağımsız olarak doğrulanmamıştır.

Detection

  • Host: bir guest'in USB 3.x / XHCI aktivitesiyle korele vmware-vmx crash'leri; VM-başına tekrarlayan VMX restart'ları muhtemel exploitation'a işaret eder.
  • Telemetri: gerçek bir USB kullanımı olmayan bir VM'den gelen anormal XHCI slot enable/disable / device-reset patlamaları.
  • EDR/host logları: free edilmiş bir object'in dereference'ıyla tutarlı fault'lar için vmware-vmx core dump'larını triyaj et.

Mitigation

  • VMSA-2020-0026 uyarınca patch'le: Workstation 15.5.7, Fusion 11.5.7 ve ESXi build'leri ESXi70U1b-17168206 (7.0), ESXi670-202011101-SG (6.7), ESXi650-202011301-SG (6.5); ayrıca VMware Cloud Foundation 4.1.0.1 / 3.10.1.2.
  • Advisory'deki workaround: maruziyeti azaltmak için etkilenen sanal makinelerden XHCI (USB 3.x) controller'ı kaldır.

References