VMware ESXi storage controller out-of-bounds read/write (CVE-2024-22273)¶
VMware ESXi, Workstation ve Fusion'ın emule edilmiş storage controller'larındaki bir out-of-bounds read/write, storage controller attach edilmiş bir guest'in bir denial of service'e yol açmasına ya da diğer bug'larla zincirlenince hypervisor üzerinde kod çalıştırmasına izin verir (VMSA-2024-0011).
Mechanism¶
Note
Her virtual disk'in önünde, host vmx device-emulation code'unda implement
edilmiş emule bir storage controller (SCSI/SATA/NVMe ailesi) durur. Guest driver,
command descriptor'ları — buffer address'leri, transfer length'leri, sector/LBA
count'ları ve scatter-gather list entry'leri — controller register'larına ve
shared ring'lere yazarak controller'ı programlar. Isolation invariant'ı şudur:
böyle her guest-sağlanan length/offset, host onu okumadan ya da yazmadan önce host
tarafındaki DMA/buffer staging alanının gerçek sınırlarına karşı doğrulanmalıdır.
CVE-2024-22273, birleşik bir out-of-bounds read (CWE-125) ve write
(CWE-787)'tir: malformed bir command descriptor, length'i ya da index'i amaçlanan
buffer'ı aşan bir transfer sürer, böylece host ya komşu belleği guest'e geri
kopyalar (leak) ya da guest-kontrollü veriyi buffer dışına yazar (corruption) — her
ikisi de vmx içindeki guest→host boundary'sini geçer.
Bu, tekrar eden "emule storage/DMA descriptor bounds-check edilmemiş" pattern'idir; write tarafındaki primitive için Out-of-bounds write ile ve integer-aritmetik besleyici için Integer overflow to buffer overflow ile karşılaştırın.
Walkthrough¶
Public reference: VMSA-2024-0011 / CVE-2024-22273, TianGong Team, Legendsec, Qi'anxin Group'tan Hao Zheng (@zhz) ve Jiaqing Huang (@s0duku) tarafından raporlandı. Kavramsal, weaponize edilmemiş yol:
High-level conceptual steps
- Storage controller etkin bir guest'te, guest içi driver bir storage command'ı (descriptor + scatter-gather list) kurar ve controller'ın register'ları/ring'i üzerinden submit eder.
- Hazırlanmış bir descriptor, host staging buffer'ının gerçek size'ını aşan bir transfer length ya da list index bildirir.
- Host controller-emulation code'u guest değerini yeterli bir bounds check olmadan kullanır ve I/O'yu buffer sonunu aşarak yapar.
- Out-of-bounds read komşu host belleğini guest'e geri döndürür (leak);
out-of-bounds write guest-kontrollü byte'ları komşu host belleğine koyar
(corruption). Şekillendirilmemiş bir girişimde sonuç bir
vmxcrash'idir — o VM/host worldlet'inin bir denial of service'i.
Warning
Bug sınıfı için belgelenmiş, patch'li sorun. Advisory bunu yalnızca "diğer sorunlarla birlikte" hypervisor code execution elde eden olarak değerlendirir; tek başına güvenilir sonuç DoS'tur. Burada descriptor layout'u, offset ya da PoC sağlanmamıştır.
Detection¶
- Host telemetry: bir guest'ten gelen malformed storage controller command'larıyla
korele
vmxworldlet panic'leri / core dump'ları vevmkernel.logstorage stack warning'leri. - Storage I/O anomalies: invalid/oversized SCSI/SATA/NVMe descriptor patlamaları, out-of-range length'li scatter-gather entry'leri ya da tek bir VM tarafından sürülen tekrarlayan controller reset'leri.
- Tek bir VM'in storage aktivitesine bağlı tekrarlayan
vmxcrash'leri, bu yüzeyin fuzzing/exploitation'ının güçlü bir sinyalidir (DoS kolay sonuç olmak üzere). - Chain awareness: bir OOB read/write storage primitive'i, bir escape için diğer ESXi
bug'larıyla birleştirilen tam olarak bu tür bir yapı taşıdır — storage-stack
vmxcrash'lerini yalnızca instability değil, potansiyel escape reconnaissance olarak ele alın.
Mitigation¶
- VMSA-2024-0011'e göre patch'leyin: ESXi 7.0.x → build 23794019'a yükseltin; ESXi 8.0.x → build 23305545'e yükseltin; advisory Response Matrix'inden ilgili Workstation/Fusion düzeltmelerini uygulayın.
- Hardening: attack surface'i küçültmek için VM'lerden gereksiz storage controller'ları kaldırın; attach edilmiş controller sayısını minimal tutun.
- Defense-in-depth:
vmxworldlet sandboxing'ini sürdürün ve tekrarlayan storage-kaynaklı crash'leri izleyin.