VMware EHCI USB heap overflow (CVE-2020-3967)¶
Guest-controlled USB 2.0 (EHCI) transfer descriptor'ları, VMware VMX userworld'ünde bir out-of-bounds heap write'ı sürer ve guest-to-host code execution'ı mümkün kılar.
Mechanism¶
Bug class: attacker-controlled transfer length'ten heap out-of-bounds write
VMware EHCI (Enhanced Host Controller Interface) guest için bir USB 2.0 controller emüle eder. Guest kendi physical memory'sinde DMA-tarzı data structure'ları — Queue Head'lerden (QH) ve Queue Element Transfer Descriptor'lardan (qTD) oluşan periodic/asynchronous bir schedule — programlar ve host VMX process'i USB transfer'leri emüle etmek için onları walk eder.
Her qTD, tamamen guest tarafından kontrol edilen bir transfer size'ı ve buffer pointer'ları taşır. Security sınırı, emulator o guest tarafından sağlanan length/offset field'larından birini, host tarafındaki bir heap buffer'a yapılan bir kopyayı, buffer'ın gerçek kapasitesine karşı tamamen clamp etmeden boyutlandırmak veya index'lemek için kullandığında aşılır. Guest descriptor'ın sahibi olduğundan, destination allocation'dan daha büyük bir transfer talep edebilir ve komşu VMX heap object'lerine bir CWE-787 out-of-bounds write üretir.
Kavramsal olarak ihlal edilen invariant şudur: bir host buffer'a kopyalanan byte'lar, guest descriptor ne iddia ederse etsin, o buffer'ın allocate edilmiş boyutunu asla aşmamalıdır. Komşu heap metadata'sını veya function pointer'larını bozmak host code execution'a giden path'tir, gerçi VMware saldırganın kontrolü dışında ek koşulların gerektiğini belirtir; pratik CVSS'in kısıtlı olmasının nedeni budur.
Sibling'den farkı: Bu not, length'in tek bir okumada yetersiz clamp edilmesinden kaynaklanan statik bir bounds-check failure'ıdır (CWE-787). Aynı emülasyondaki TOCTOU double-fetch race varyantı için (length'in validation ile use arasında flip'lenmesi, CVE-2020-3966) bkz. VMware EHCI USB heap overflow race.
Walkthrough¶
Bu, public VMSA-2020-0015 / ZDI-20-784 materyalinden yüksek seviyeli bir yeniden inşadır. Offset, gadget veya çalışan exploit verilmemiştir.
- Guest virtual EHCI controller'ı etkinleştirir ve guest physical memory'de bir USB transfer schedule'ı (QH + qTD chain) inşa eder.
- Guest, declared transfer length'i emulator'ın transfer'i içine stage edeceği host buffer'ın boyutunu aşan bir qTD craft eder.
- Guest controller'ı çalar (operational register'ları yazar) ki VMX EHCI emülasyonu schedule'ı işlesin.
- Emulator inflated length'i kullanarak guest verisini kopyalar ve bir host heap allocation'ının sonunu aşarak yazar.
Conceptual descriptor shape (illustrative, not exploit values)
qTD {
next_qtd
token { status, PID(IN/OUT), total_bytes = <attacker-large> , ... }
buffer_ptr[0..4] // guest physical addresses
}
total_bytes'ın guest-controlled olması ve emulator'ın
kopyayı stage ederken ona güvenmesidir.
Warning
Controller'ı tamamen düşman input olarak ele al. Guest-reachable herhangi bir USB device model'i (EHCI/UHCI/xHCI), zengin yapılandırılmış, attacker-authored data structure'ları doğrudan host process address space'inde parse eder.
Detection¶
- VMX worldlet crash'leri / core dump'lar: bir OOB write tipik olarak host heap'i
bozar ve
vmxprocess'ini crash eder. Guest'in USB aktivitesiyle ilişkili bir VMX panic,Backtrace,CoreDumpveyaMonitorPanicgösterenvmware.logkayıtlarına bak. - ESXi vmkernel logları: beklenmedik userworld (
vmx) termination'ı, ZDUMP/core üretimi, ya da tek bir VM içinFailed to power on/restart döngüleri. - EDR / host telemetrisi: per-VM
vmxprocess'inin tekrarlanan anormal exit'leri; VM dizini altında beliren yeni core dump dosyaları. - Guest tarafı anomali: virtual EHCI controller'ı oversized transfer descriptor'larıyla programlayan veya controller'ı tekrar tekrar reset/ring eden bir VM şüphelidir, özellikle meşru USB pass-through ihtiyacı olmayan guest'lerde.
Mitigation¶
- VMSA-2020-0015'ten fixed build'lere patch uygula:
- ESXi 6.5:
ESXi650-202005401-SG - ESXi 6.7:
ESXi670-202004101-SG - ESXi 7.0:
ESXi_7.0.0-1.20.16321839 - Workstation 15.x: 15.5.5
- Fusion 11.x: 11.5.5
- Attack surface'i azalt: kullanılmayan virtual USB controller'larını VM'lerden kaldır. Bir guest USB'ye ihtiyaç duymuyorsa, VMX yapılandırmasında bir USB 2.0/EHCI (veya xHCI) controller sunma.
- Defense in depth: host'u sertleştirilmiş, patch'li bir hypervisor build'inde tut; corruption'ı sınırlamak için mevcut ESXi/Workstation ile gelen VMX userworld sandbox/seccomp confinement'ına ve heap hardening'ine güven.