VMware e1000/e1000e out-of-bounds write (CVE-2019-5524)¶
VMware'in emüle edilmiş e1000/e1000e network adapter'ındaki bir out-of-bounds write, bir guest'in host memory'sini bozmasına izin verir (potansiyel host code execution, daha sık guest DoS).
Mechanism¶
Bug class: emüle edilmiş bir NIC DMA path'inde trusted descriptor/length
e1000 / e1000e yaygın olarak emüle edilen Intel gigabit NIC modelleridir. Hypervisor'daki device model, guest physical memory'den transmit/receive descriptor'ları okur; her descriptor, host'a paketleri nasıl assemble edeceğini ya da böleceğini söyleyen length'ler, offset'ler ve feature flag'leri taşır (TCP/IP segmentation-offload ve checksum-offload parametreleri dahil).
Security invariant'ı şudur: device model, guest tarafından sağlanan her descriptor field'ını, içine kopyalamadan önce host tarafındaki packet buffer'ın boyutuna karşı doğrulamalıdır. CVE-2019-5524 bir out-of-bounds write'tır: e1000 packet-processing path'indeki guest-controlled bir length/offset yeterli bir bound olmadan kullanılır, böylece emulator bir host buffer'ın sonunu aşarak yazar. Write host VMX process'inin içinde olur, yani guest->host sınırı write yönünde aşılır — en tehlikeli tür, çünkü kontrollü host-memory corruption host code execution'a yönlendirilebilir. Pratikte bu tür birçok NIC over-write'ı komşu emulator state'ine düşer ve önce device model'i crash eder; bu yüzden VMware en olası sonucu denial of service olarak derecelendirdi ama host code execution'ın mümkün olduğu konusunda da uyardı.
Bu, diğer emüle edilmiş NIC bug'larında görülen aynı yapısal zayıflıktır (örn. QEMU e1000/e1000e segmentation-offset over-write'ları): host'un guest'ten güvendiği segmentation/offset aritmetiği.
Walkthrough¶
Bug'a yalnızca virtual NIC'i guest'ten sürerek ulaşılır; VM içinde çalışmanın ötesinde özel bir host ayrıcalığı gerekmez. Kavramsal olarak:
- Guest'in NIC driver'ı (ya da saldırgan kodu) bir transmit/receive descriptor'ı, emulator'ın kullanacağı host buffer'ı aşan bir length, offset veya offload parametresi ile programlar.
- Guest device doorbell'ını çalar ve host e1000 model'inin descriptor'ı işlemesine yol açar.
- Host trusted size'ı kullanarak paketi kopyalar/assemble eder ve buffer'ının sonunu aşarak yazar — komşu VMX heap state'ini bozar.
Conceptual descriptor with an over-large length (illustrative only)
Shape of the unchecked copy (conceptual)
Açıklanan materyal bug'ı advisory seviyesinde tanımlar; fix, e1000 packet path'indeki eksik bounds check'i ekler.
Detection¶
Telemetri sinyalleri
- VMX crash'leri: network aktivitesiyle ilişkili
vmware-vmxaccess violation'ları / core dump'lar; ESXi'de, virtual NIC'e bağlıvmkernel.log'daki VM panic'leri veya worldlet crash'leri. - vmware.log: e1000/e1000e device model'inden hatalar, tekrarlanan NIC reset'leri, ya da tek bir VM'den VM power-off olayları.
- Guest DoS: guest network stack'inin tekrar tekrar hang/reset olması başlı başına bir semptom olabilir, çünkü en yaygın sonuç device-model başarısızlığıdır.
- Davranışsal: oversized length'ler veya olağandışı TSO/checksum-offload kombinasyonlarıyla malformed TX/RX descriptor'ları yayan bir guest — normal bir driver'a kıyasla anormal ve fuzzing/exploitation işareti.
Mitigation¶
Patch ve sertleştirme
- Patch (VMSA-2019-0005'e göre): Workstation 15.x için 15.0.4 ve 14.x için 14.1.7; Fusion 11.x için 11.0.3 ve 10.x için 10.1.6.
- Config sertleştirme: Intel NIC emülasyonu gerektirmeyen VM'ler için emüle edilmiş e1000/e1000e yerine paravirtual VMXNET3 adapter'ını tercih et — bu, vulnerable device model'i attack surface'ten kaldırır. Kullanımda olmayan virtual NIC'leri kaldır.
- Defense in depth: guest'leri patch'li hypervisor'larda tut; untrusted guest'leri host networking emülasyonuna düşman olarak ele al.