Skip to content

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
  1. 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.
  2. Hazırlanmış bir descriptor, host staging buffer'ının gerçek size'ını aşan bir transfer length ya da list index bildirir.
  3. Host controller-emulation code'u guest değerini yeterli bir bounds check olmadan kullanır ve I/O'yu buffer sonunu aşarak yapar.
  4. 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 vmx crash'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 vmx worldlet panic'leri / core dump'ları ve vmkernel.log storage 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 vmx crash'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 vmx crash'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: vmx worldlet sandboxing'ini sürdürün ve tekrarlayan storage-kaynaklı crash'leri izleyin.

References