VMware ESXi ACPI TOCTOU OOB write (CVE-2020-3982)¶
VMware'in emule edilmiş ACPI device'ındaki bir time-of-check/time-of-use race, ayrıcalıklı bir guest'in bir out-of-bounds write yoluyla VMX heap'ini corrupt etmesine izin verir.
Mechanism¶
Bug class: bir out-of-bounds write'ı besleyen TOCTOU race (CWE-367 + CWE-787)
VMX user-space process'i guest adına bir ACPI device emule eder. Guest bir request gönderdiğinde, emulation code guest ile paylaşılan (ya da guest tarafından yeniden okunabilen) bir buffer'dan bir length/index field'ı okur, onu doğrular ve sonra host tarafındaki bir allocation'ı index'lemek ya da ona kopyalamak için kullanır. Doğrulanan değer ile fiilen kullanılan değer iki farklı anda okunduğu için, ikinci bir guest vCPU check ile use arasındaki pencerede field'ı mutate edebilir. Emulator'ün dayattığına inandığı bound'lar write anında artık geçerli değildir, dolayısıyla copy hedef heap object'inin sonunu aşar. Geçilen boundary guest -> host (VMX)'tir: guest doğrudan host memory erişimi asla kazanmaz, ama hedef offset'i doğrulamadan kaçan bir host write primitive'ini etkiler.
İhlal edilen kök invariant şudur: "bir memory access için kullanılan değer, bounds-check edilen değerle aynı olmalıdır." Single-fetch (copy-then-validate-the-copy) ya da kullanımdan hemen önce re-validation yapısal düzeltmedir.
Walkthrough¶
High-level conceptual reproduction (from VMSA-2020-0023 / NVD)
Tüm adımlar guest VM içinde administrative access olan kötü niyetli bir aktör gerektirir (belgelenmiş precondition). Akış yalnızca kavramsaldır:
- Shared field'ı bulun. length/offset field'ı host emulator tarafından tek bir operasyon sırasında birden fazla kez okunan ACPI request structure'ını tespit edin.
- Yarışan bir thread'i sabitleyin. İki guest vCPU çalıştırın: biri ACPI operasyonunu yapar, diğeri shared region'daki length/offset field'ını tekrar tekrar yeniden yazar.
- Pencereyi kazanın. İlk vCPU doğrulamayı küçük, in-bounds bir değerle geçer; yarışan vCPU, emulator copy/index yapmadan önce onu oversized bir değere çevirir.
- Out-of-bounds write. Host kendi heap allocation'ının sınırlarının ötesine
yazar. En basit sonuç bir
vmxcrash'idir (panic / core dump); dikkatlice groom'lanmış bir heap ise bunun yerine komşu metadata'yı ya da pointer'ları corrupt edebilir.
Catalogue altitude
Bu giriş kasten spesifik ACPI opcode'unu, struct offset'lerini, tam race timing'ini ve herhangi bir heap-grooming layout'unu atlar. Advisory'ye göre gerçekçi sonuç bir crash'tir; hypervisor-heap corruption'a escalation VMware tarafından not edilir ama hazır-anahtar (turnkey) bir sonuç değildir.
Detection¶
vmware.log(per-VM): Başarılı bir race tipik olarak ACPI device emulation'dan geçen bir backtrace ile bir VMX panic'i ve üretilen bir core dump (vmx-zdump.*) oluşturur. Tek bir VM'de tekrarlayan VMX panic'leri bir exploitation girişiminin güçlü bir sinyalidir.- ESXi
vmkernel.log/hostd.log: Belirli bir VM ile korelevmxprocess termination event'lerini ve world (process) restart'larını arayın. - Crash cadence: TOCTOU exploitation olasılıksaldır, yani attacker race'i tekrar çalıştırdıkça tekrarlayan VMX crash/restart patlamaları bekleyin — tek seferlik bir guest-OS fault'undan farklıdır.
- Core-dump triage: Beklenen ACPI buffer'ın çok dışındaki bir faulting address ya da komşu heap chunk header'larının corruption'ı, benign bir null-deref yerine bir OOB write ile tutarlıdır.
Mitigation¶
Patch
VMSA-2020-0023'te listelenen düzeltilmiş build'leri uygulayın: ESXi 6.5 / 6.7 / 7.0, Workstation 15.x ve Fusion 11.x düzeltme aldı; ürün hattı başına tam fixed build numaraları için advisory'ye bakın. Patch tek eksiksiz remediation'dır — race emulator'ün iç meselesidir.
- Attack surface'i azaltın: Guest workload'unun gerektirmediği yerlerde kullanılmayan emule edilmiş device'ları kaldırın, böylece guest'ten erişilebilen VMX code'unu daraltın.
- Guest'te least privilege: Bug guest içinde administrative access gerektirir; guest içi admin'i sınırlamak onu kimin tetikleyebileceğini azaltır (defense in depth, düzeltme değil).
- Multi-tenant host'ları izole edin / izleyin: Tekrarlayan VMX core dump'larını yalnızca bir stabilite event'i değil, bir güvenlik event'i olarak ele alın.