Skip to content

VMware EHCI USB info leak (CVE-2020-3964)

VMware USB 2.0 (EHCI) controller emulation'ındaki bir information leak, guest'in hypervisor (VMX) process belleğinden ayrıcalıklı veriyi okumasına izin verir.

Mechanism

Bug class: guest'e geri dönen uninitialized/out-of-bounds read

VMware EHCI emulation'ı, USB transfer'leri için guest physical memory ile host tarafındaki staging buffer'lar arasında veri taşır. Bu yoldaki bir information-leak bug'ı, emulator guest'e vermemesi gereken host belleğini geri döndürdüğünde ortaya çıkar — ya bir uninitialized heap region (önceki bir allocation'dan kalan stale byte'lar) ya da guest kontrolündeki transfer-descriptor (qTD) length/offset field'larının sürüklediği şekilde bir buffer'ın amaçlanan sınırlarının ötesinden okunan byte'lar.

Guest bir IN transfer (host-to-guest yönü) programlar ve emulator'ün daha fazla byte'ı, ya da hiç düzgünce initialize etmediği bir bölgeden byte'ları guest'in receive buffer'ına kopyalamasını ayarlar. Sonuç tek yönlü bir guest/host boundary boyunca info-leak'tir: host code execution yok, ama guest hypervisor'ın address space'inden ayrıcalıklı bilgi okuyabilir.

İhlal edilen invariant şudur: guest'e yalnızca host'un bu transfer için açıkça ürettiği veri teslim edilebilir. Uninitialized ya da out-of-range host byte'larını geri döndürmek heap layout'unu, pointer'ları ya da ASLR'ı yenmek ve bir write primitive ile zincirlemek için değerli olan başka secret'ları sızdırır (ör. kardeş EHCI overflow CVE'leri).

Walkthrough

VMSA-2020-0015 / ZDI materyalinden high-level reconstruction. Offset ya da exploit code yok.

  1. Guest virtual EHCI controller'ı etkinleştirir ve guest physical memory içinde bir USB transfer schedule'ı (QH + qTD) kurar.
  2. Guest, length/buffer field'ları emulator'ün bu transfer için hiç initialize edilmemiş (ya da amaçlanan source region'ın hemen dışında duran) host byte'larını kopyalamasına yol açan bir IN qTD hazırlar.
  3. Guest controller'ı çalıştırır; emulator transfer'i tamamlar ve host byte'larını guest receive buffer'ına teslim eder.
  4. Guest kendi buffer'ını geri okur ve sızdırılan hypervisor belleğini elde eder.
Conceptual leak shape (illustrative)
qTD { PID = IN, total_bytes = N, buffer_ptr -> guest receive area }
// emulator stages N bytes from a host buffer that is larger/uninitialized
// -> stale or OOB host bytes land in the guest-visible buffer

Warning

Info leak'ler force multiplier'dır. Bir defender, güvenilir şekilde guest-readable olan herhangi bir hypervisor-memory leak'inin ASLR'ı bypass etmek için toplandığını ve bir corruption primitive ile eşleştirileceğini varsaymalıdır.

Detection

  • Telemetri tasarımı gereği zayıftır: saf bir read leak genelde vmx'i crash etmez, yani core dump yokluğu güvenlik anlamına gelmez. Crash'lere değil, davranışa odaklanarak avlanın.
  • Behavioral signal: virtual EHCI controller'ı alışılmadık IN transfer descriptor'larıyla programlayan, ya da host belleğini yoklamak için tekrar tekrar short/odd-length read'ler yapan bir guest — özellikle meşru USB kullanımı olmayan bir VM'de.
  • ESXi vmkernel / vmware.log: crash'ler olası olmasa da, USB device model'inin yaydığı herhangi bir EHCI ile ilgili warning ya da assertion mesajını arayın.
  • EDR / host telemetry: guest'lerden gelen yoğun virtual-USB I/O'yu, sonradan hedefli bir host exploit girişiminin işaretleriyle korele edin (leak tipik olarak bir write-primitive girişiminden önce gelir).

Mitigation

  • Patch: VMSA-2020-0015'teki düzeltilmiş build'lere geçin:
  • ESXi 6.5: ESXi650-202005401-SG
  • ESXi 6.7: ESXi670-202006401-SG
  • ESXi 7.0: ESXi_7.0.0-1.20.16321839
  • Workstation 15.x: 15.5.2
  • Fusion 11.x: 11.5.2

    ESXi 6.7 build stream (per-CVE mapping doğrulandı)

    VMSA-2020-0015 ESXi 6.7 için iki ayrı build stream'i listeler: USB info-leak'ler (CVE-2020-3963/3964/3965) ESXi670-202006401-SG ile, kardeş EHCI heap-overflow'lar (CVE-2020-3966/3967) ise ESXi670-202004101-SG ile düzeltilir — bu yüzden komşu (heap-overflow) notlarla farklı bir build görmek beklenen ve doğru bir durumdur. Per-CVE build eşlemesi Qualys ThreatPROTECT tablosundan teyit edilmiştir (bkz. References).

  • Attack surface'i azaltın: leak path'i guest'ten erişilebilir olmasın diye kullanılmayan virtual USB/EHCI controller'ları VM konfigürasyonlarından kaldırın.

  • OS/compiler defense: host staging buffer'larını kullanmadan önce zero-initialize edin ve copy length'lerini producer'ın gerçek byte sayısına clamp'leyin; bunlar uninitialized/OOB read sınıfını kaynağında ortadan kaldırır.

References