Skip to content

VMware virtual USB UHCI OOB read/write guest-to-host (CVE-2019-5518)

VMware'in emüle ettiği USB 1.1 UHCI controller'daki bir out-of-bounds read/write, virtual USB controller'a sahip bir guest'in emulation buffer dışındaki host VMX memory'sini okumasına veya bozmasına izin vererek guest-to-host code execution'a olanak tanır.

Mechanism

Bug class: guest tarafından yazılmış UHCI schedule üzerinde eksik/hatalı bounds check

Virtual USB 1.1 UHCI (Universal Host Controller Interface), host VMX userworld'ünde emüle edilir. Guest, bir transfer schedule kurar — Queue Head (QH) ve Transfer Descriptor (TD)'lere işaret eden bir frame list — ve bunu guest physical memory içinde oluşturur; host da emüle USB I/O'yu gerçekleştirmek için bu schedule'ı dolaşır. Her TD; host'un dereference edip bir host-side buffer'a/dan kopyaladığı pointer'lar, bir transfer length ve buffer adresleri taşır.

Boundary aşılır çünkü guest-controlled bir TD'den alınan length veya index field'ı, o buffer'ın gerçek boyutuna karşı bounds check olmadan (ya da hatalı bir bounds check ile) bir host buffer'ı okumak veya yazmak için kullanılır. Guest, range dışı bir length ya da allocation'ı aşıp giden bir buffer/index verdiğinde, host'un copy veya array access'i out of bounds çalışır — bir read komşu host memory'sini açığa çıkarır, bir write ise onu bozar.

İhlal edilen invariant şudur: guest tarafından sağlanan her size ve offset, kullanılmadan önce index'lediği host buffer'a karşı validate edilmelidir. Schedule tamamen attacker tarafından yazıldığı için, host'un range içinde kabul ettiği herhangi bir field bir OOB read/write primitive'ine dönüşür. Komşu host heap içeriği üzerindeki kontrolle birleşince, write primitive'i host code execution'a yükselir.

İlişki: aynı bug, farklı soyutlama seviyesi

Bu note, CVE-2019-5518'i (ZDI-19-421 ile birebir eşleşir) principle seviyesinde anlatır: guest-controlled bir size/offset'in host buffer boyutuna karşı validate edilmemesi. Aynı bug'ın somut MaxLen / URB / uhci_parse_td_list() ayrıntıları ve Pwn2Own (Fluoroacetate) escape zinciri için near-duplicate olan vmware-uhci-usb-controller-bug'a bakın — ikisi de aynı VMSA-2019-0005 fix'ini paylaşır.

Walkthrough

Warning

Tarihsel ve patch'lenmiş (VMSA-2019-0005, 2019). Yalnızca public CVE/advisory'den kavramsal bir yeniden kurgu — offset, struct layout veya exploit yok.

  1. Guest, bir virtual USB controller'ı etkinleştirir ve UHCI register'larını programlayarak controller'ı guest physical memory'deki bir frame list / schedule'a yönlendirir.
  2. Guest, transfer length'i, buffer pointer'ı veya index field'ı host buffer'ın alabileceği range'in dışında olan bir TD hazırlar.
  3. Host emulator schedule'ı işler ve malicious field'ı kullanarak sabit host buffer'ına/dan kopyalama yapar; allocation'ın sonunu aşacak şekilde okur veya yazar.
  4. OOB read komşu host memory'sini guest'e geri sızdırır ya da OOB write komşu host heap state'ini bozar; grooming ile write host code execution'a varır.
Kavramsal OOB access (yalnızca örnekleme amaçlı)

host: td  = read_descriptor(guest_phys)         // attacker-authored
      len = td.transfer_length                  // unvalidated
      copy(host_buf, guest_buf, len)            // len > sizeof(host_buf) -> OOB
Yalnızca kontrol edilmemiş, guest tarafından sağlanan bir length/index'in kullanımı load-bearing'dir; somut size ve offset'ler kasıtlı olarak çıkarılmıştır.

Detection

  • VMX crash'leri / core dump'lar: vmware.log içinde guest USB controller aktivitesiyle çakışan vmware-vmx fault'ları (Backtrace/CoreDump/MonitorPanic), unmapped ya da guard memory'ye çarpan bir OOB write'a işaret eder.
  • ESXi vmkernel logları: VM başına vmx userworld sonlanmaları veya ZDUMP'lar; attacker malicious descriptor'ı ayarladıkça sık sık kümelenir.
  • Behavioral sinyal: bir guest'in bir UHCI controller'ı yapılandırması/ring etmesi ve anormal length field'larıyla USB transfer'leri göndermesi — özellikle meşru bir USB passthrough ihtiyacı olmayan bir VM'den geliyorsa — şüphelidir.
  • EDR / host telemetry: VM dizini altında tekrarlayan VM başına vmware-vmx restart'ları ve yeni core dump dosyaları.

Mitigation

  • VMSA-2019-0005'teki düzeltilmiş build'lere patch'leyin:
  • ESXi 6.0 / 6.5 / 6.7: ESXi600-201903001 / ESXi650-201903001 / ESXi670-201903001 (build'ler 13003896 / 13004031 / 13004448).
  • Workstation 14.x: 14.1.7; 15.x: 15.0.4.
  • Fusion 10.x: 10.1.6; 11.x: 11.0.3.
  • Attack surface'i azaltın (workaround): virtual USB 1.1 controller'ı VM'den kaldırın. Bir virtual USB 2.0 (EHCI) controller eklemenin default olarak bir USB 1.1 controller da eklediğini unutmayın; dolayısıyla USB 2.0'ı kaldırmak vulnerable 1.1 path'ini de kaldırır.
  • OS/compiler defense: kalıcı düzeltme, copy'den önce guest tarafından sağlanan her TD length/index'ini host buffer boyutuna karşı validate etmektir; host-side heap hardening, kalan herhangi bir OOB write'ın etkisini sınırlar.

References