Skip to content

VMware vmxnet3 uninitialized stack info leak (CVE-2018-6982)

VMware'in emüle ettiği vmxnet3 paravirtual NIC'inde guest tarafından tetiklenebilir bir uninitialized stack memory kullanımı (CWE-908); host memory'sini guest'e sızdırır. CVE-2018-6981'in information-disclosure kardeşi; GeekPwn 2018'de raporlandı, VMSA-2018-0027'de düzeltildi.

Mechanism

Note

Kardeşi CVE-2018-6981 gibi, bu bug da host vmware-vmx (VMX) process'i içindeki vmxnet3 device backend'inde yaşar. Isolation invariant'ı, içeriği guest'e geri dönen herhangi bir host buffer ya da stack bölgesinin — bir DMA write, bir descriptor field ya da bir status word ile — önce tamamen initialize edilmiş olması gerektiğidir; böylece artakalan hiçbir host data boundary'yi aşmaz.

CVE-2018-6982 bir use-of-uninitialized-resource info leak'idir (CWE-908). vmxnet3 emulation'ındaki bir stack variable ya da buffer, bir code path'te kısmen veya tamamen uninitialized bırakılır ve sonra guest'e doğru geri kopyalanır. O stack bölgesini işgal eden hangi stale host memory varsa — pointer'lar, önceki request data'sı, artakalan heap adresleri — guest tarafından okunabilir hale gelir. Aşılan boundary host → guest'tir: bu corruption değil disclosure'dır, ama sızan host pointer'ları tam olarak bir attacker'ın ASLR'yi yenmek ve CVE-2018-6981 gibi bir corruption bug'ını weaponize etmek için ihtiyaç duyduğu şeydir.

Bu, VMware vmxnet3 uninitialized stack guest-to-host escape (CVE-2018-6981)'in read-tarafı karşılığıdır; ikisi de VMSA-2018-0027'de birlikte düzeltildi.

Walkthrough

Public, patch'lenmiş issue (VMSA-2018-0027). Yalnızca kavramsal yol:

  1. Bir vmxnet3 adapter'a sahip bir guest içinde local administrator elde edin (device'ın driver-seviyesinde kontrolü).
  2. Device'ı, guest'e doğru data döndüren code path'ten — ör. bir descriptor/status field'ı ya da bir DMA writeback — host buffer'ın tam olarak initialize edilmediği bir path üzerinden sürün.
  3. Guest-visible bölgeyi geri okuyun; host'un initialize etmekte başarısız olduğu byte'lar artakalan host process memory'sini içerir (potansiyel pointer'lar/adresler).
  4. Sızan değerleri host adres-uzayı layout'unu yeniden kurmak için bir araya getirin; ayrı bir memory-corruption escape'inin habercisi olarak ASLR'yi yenin.

Warning

Tarihsel/patch'lenmiş, yalnızca kavramsal. Yalnızca ESXi etkisi (Important); advisory'ye göre Workstation/Fusion için geçerli değil. Offset veya field-seviyesinde detay verilmemiştir.

Detection

  • Host: bu sessiz bir leak'tir (kendi başına crash yok), dolayısıyla detection behavioral sinyallere dayanır — bir guest'in olağandışı vmxnet3 read/status path'lerini çalıştırması ya da leak'i yeniden tetiklemek için adapter'ı tekrar tekrar reset etmesi.
  • VM için vmware.log: tekrarlayan vmxnet3 device-state geçişleri veya reset'ler.
  • Inventory: etkilenen ESXi build'lerinde vmxnet3'lü VM'leri enumerate edin; corruption kardeşi CVE-2018-6981 ile korele edin (info leak + corruption tam chain'dir).

Mitigation

  • ESXi için VMSA-2018-0027 düzeltmelerini uygulayın: 6.7 (ESXi670-201811401-BG) ve 6.5 (ESXi650-201811301-BG). ESXi 6.0, Workstation ve Fusion CVE-2018-6982'den etkilenmez. Patch'lemekten başka workaround yok.
  • Mümkün olduğunda untrusted guest'ler için vmxnet3 olmayan bir NIC modeli kullanın.
  • Compiler/OS defense-in-depth: stack buffer'larını ve guest'e doğru kopyalanan herhangi bir bölgeyi zero-initialize edin (-ftrivial-auto-var-init=zero tarzı hardening); bu tüm sınıf uninitialized-memory disclosure'ı kaldırır.

References