Skip to content

VMware Workstation VBluetooth/USB uninitialized-memory + SDP stack-overflow guest-to-host escape

Pwn2Own Vancouver 2023 VMware Workstation guest-to-host chain'i (CVE-2023-20870 uninitialized-heap info leak + CVE-2023-20869 stack buffer overflow); emüle USB/Bluetooth (VBluetooth) device path'inde — VUsbBluetooth_OpNewUrb/RBuf_New uninitialized heap ve SDP (SDPData_ReadElement/ReadRawInt) stack overflow. Not: backdoor/RPCI burada yalnızca komşu virtual-device transport bağlamıdır, bug sınıfı değildir.

Mechanism

Note

VMware Workstation, virtual device'ları host user-space process'i vmware-vmx içinde emüle eder. Isolation invariant'ı, guest tarafından sağlanan her device state byte'ının — USB Request Block'ları (URB'ler), L2CAP/SDP paketleri, register ve FIFO içerikleri — host onun üzerinde işlem yapmadan önce initialize edilmiş ve bounds-check'ten geçmiş olması gerektiğidir. Pwn2Own 2023 chain'i, "Share Bluetooth devices with the virtual machine" etkinken ulaşılabilen virtual Bluetooth bileşeninde (VBluetooth) bu invariant'ın iki yönünü kırar: (1) uninitialized host heap guest'e geri döner (CVE-2023-20870, OOB read / info leak) ve (2) guest-controlled bir length sabit bir stack buffer'ı overflow eder (CVE-2023-20869, stack-based overflow). Bu parsing privileged vmware-vmx host process'inde çalıştığı için, onun memory'sini sızdırmak host ASLR'yi yener ve onun stack'ini bozmak host code execution sağlar — bir out-of-VM escape.

Bu, SVGA display escape'leriyle (bkz. Cloudburst) ve QEMU device-emulation corruption'ıyla (bkz. QEMU device-emulation MMIO/PIO callback memory corruption) aynı "guest tarafından sağlanan device descriptor'lara güven" kusur sınıfıdır.

Walkthrough

Public referans: ZDI'nin writeup'ı ve VMSA-2023-0008. Kavramsal yeniden üretim yolu (örnekleme amaçlı, public materyalden — weaponize edilmiş chain yok):

  1. Guest'ten, URB göndermek için emüle USB controller'ı sürün. ZDI'ye göre, VUsbBluetooth_OpNewUrb() bir buffer'ı RBuf_New()malloc ile allocate eder ve uninitialized bırakır; urb_actualsize field'ı guest-controllable total_urb_len'den validation olmadan alınır.
  2. urb_actualsize hiç üzerine yazılmasın diye geçersiz bir opcode'lu bir URB gönderin; UHCI_UrbResponse() ardından uninitialized host heap byte'larını guest'e geri döndürür, vmware-vmx pointer'larını sızdırır (CVE-2023-20870) ve host ASLR'yi yener.
  3. Bir Bluetooth L2CAP bağlantısı kurun (signalling CID'ye L2CAP_CMD_CONN_REQ, PSM 0x1) ve Service Discovery Protocol'ü çalıştırın. ZDI'ye göre, SDPData_ReadElement() bir size descriptor okur ve guest-controlled bir sizeSDPData_ReadRawInt()'e geçirir; sabit boyutlu bir stack buffer'ı overflow eder (CVE-2023-20869).
  4. Leak ile overflow'u birleştirerek vmware-vmx'te host control flow'u yeniden yönlendirin.

Beklenen gözlemlenebilir: non-exploit bir denemede, bir guest'ten gelen anormal Bluetooth URB/SDP trafiğinin ardından vmware-vmx bir stack canary'de abort eder / crash olur.

Warning

Bug sınıfı için belgelenmiş, tarihsel, patch'lenmiş issue. Not kavramsaldır ve exploit offset'i ya da host memory layout'u sağlamaz.

Detection

  • Bluetooth sharing etkin VM'leri inventory edin — device yüzeyine yalnızca o konfigürasyonda ulaşılabilir (VMware KB91760).
  • Host-side: guest Bluetooth (URB, L2CAP, SDP) aktivitesiyle korele vmware-vmx crash'leri / stack-protector abort'ları.
  • Guest-integrity: hiçbir Bluetooth workload'u beklenmezken bir guest'in Bluetooth SDP trafiği / malformed URB'ler göndermesi anormaldir.

Mitigation

  • VMSA-2023-0008'i uygulayın: VMware Workstation 17.0.2 ve Fusion 13.0.2'de düzeltildi (vulnerable örnek build 17.0.1).
  • VMware'e göre workaround: VBluetooth attack surface'ini kaldırmak için "Share Bluetooth devices with the virtual machine"'i devre dışı bırakın.
  • Defense in depth: device emulation'ı azaltılmış yetkiler/sandbox'lama ile çalıştırın; böylece bir vmware-vmx compromise'i tam host kontrolü olmaz.

References