Skip to content

VMware UHCI USB double-fetch (CVE-2021-22041)

UHCI USB controller'ındaki bir double-fetch (TOCTOU), ayrıcalıklı bir guest'in shared-memory descriptor'larıyla race etmesine ve host VMX process'i olarak kod çalıştırmasına izin verir.

Mechanism

İhlal edilen invariant

Emüle edilen UHCI USB controller, guest'in hâlâ concurrent olarak modifiye edebileceği guest belleğinden transfer descriptor'larını okur. Korunan sınır guest → host (VMX) code execution'dır. CVE-2021-22041 bir double-fetch / TOCTOU'dur: emulator guest belleğinden bir length ya da pointer alanını validate etmek için bir kez okur, sonra kullanmak için yeniden okur. İki fetch arasında ikinci bir guest thread'i değeri değiştirir, dolayısıyla validation'dan geçen değer üzerine işlem yapılan değer değildir. Emulator sonra range dışı ya da saldırganın seçtiği bir boyut üzerinde işlem yapar ve host belleğini bozar. İhlal edilen invariant, guest-shared bellek üzerinde validate-then-use'un atomicity'sidir.

Important olarak derecelendirildi (CVSS 8.4). Guest'te local administrative ayrıcalıklar ve VM'e exposed bir isochronous USB endpoint gerektirir; VMSA-2022-0004'te düzeltildi (Tianfu Cup kümesinin parçası).

Walkthrough

VMSA-2022-0004'ten, yüksek seviyeden:

  1. Mevcut bir isochronous USB endpoint'i olan admin-ayrıcalıklı bir guest'ten, guest-shared belleğe bir UHCI descriptor yerleştir.
  2. Emulator'la concurrent olarak race et: validation'ın benign bir değer okumasını sağla, sonra ikinci fetch onu kullanmadan önce alanı flip et.
  3. Emulator kötücül değer üzerinde işlem yapar ve host VMX process'inde code execution'a escalate edilen bir out-of-bounds operation üretir.

double-fetch primitive'ine bak (../primitive/double-fetch-shared-memory-ring-toctou-from-guest-memory.md); exploit ayrıntıları atlanmıştır.

Detection

  • USB/UHCI aktivitesine bağlı vmware-vmx abort'ları için vmware.log ve host crash dump'ları.
  • Bir guest'ten anormal, yüksek hızlı UHCI descriptor mutasyonu (racing davranışı).
  • USB device aktivitesinin ardından anormal VMX-process execution'ını işaretleyen EDR.

Mitigation

  • VMSA-2022-0004'ü uygula (ESXi, Workstation 16.2.0+, Fusion 12.2.0+).
  • Erişilebilir surface'i ortadan kaldırmak için untrusted VM'lerden virtual USB controller'ları / isochronous USB passthrough'u kaldır.
  • Mümkün olduğunda, emulator'lar race'i kapatmak için guest descriptor'larını bir kez private bir buffer'a kopyalamalıdır (single-fetch).

References