Skip to content

VMware Workstation/Fusion vmnetdhcp DHCP use-after-free (CVE-2020-3947)

VMware Workstation/Fusion guest-to-host use-after-free (CVE-2020-3947, VMSA-2020-0004) in the host vmnetdhcp virtual DHCP server. NOT: bu kayıt eskiden "COM1 serial-port escape" olarak adlandırılmıştı (slug bu alias'ı korur), ama birincil kaynaklara (ZDI, VMSA-2020-0004) göre bu CVE bir serial/COM1 device'ında değil, host vmnetdhcp virtual DHCP server'ında bir use-after-free'dir — başlık ve özet gerçek vulnerability'ye göre düzeltilmiştir.

Mechanism

Warning

Bu kaydın slug'ı/alias'ları "COM1 serial port"a referans verir, ama atıf verilen birincil kaynaklar (ZDI, VMSA-2020-0004) CVE-2020-3947'nin host vmnetdhcp virtual DHCP server'ında bir use-after-free olduğunu ortaya koyar. Aşağıdaki içerik gerçek vulnerability'yi belgeler.

Note

vmnetdhcp, VMware'in virtual network'lerinde guest VM'ler için DHCP yanıtlayan host-side bir servistir. Isolation invariant'ı, guest kaynaklı DHCP mesajlarının host-side handling'inin lease bookkeeping'ini tutarlı tutması gerektiğidir — freed bir pointer'ı reachable bırakan hiçbir object aliasing olmamalı. ZDI'ye göre, malicious bir DHCP mesaj dizisi supersede_lease'i, bir source ile bir destination lease yapısı arasında aliased olan bir client-identifier (uid) buffer'ını free etmeye sürer; bu da destination uid pointer'ını dangling bırakır; sonraki bir write_lease access'i o freed pointer'ı dereference eder. vmnetdhcp host'ta çalıştığı için, UAF host OS'ta code execution'a yol açabilir — virtual network üzerinden guest→host boundary'sini aşarak.

Bu, device/service-emulation memory-safety sınıfıdır; QEMU'daki network service / DMA-reentrancy UAF'leriyle karşılaştırın (bkz. QEMU e1000e DMA reentrancy use-after-free).

Walkthrough

Public referans: ZDI'nin "CVE-2020-3947: Use-After-Free in the VMware Workstation DHCP Component" yazısı ve VMSA-2020-0004. Kavramsal yeniden üretim yolu (örnekleme amaçlı, public writeup'tan — weaponize edilmiş chain yok):

  1. Guest'ten bir DHCPDISCOVER, ardından aynı lease için bir DHCPRELEASE gönderin.
  2. ZDI'ye göre, supersede_lease (vmnetdhcp+0x3160), source ve destination lease yapıları arasında aliased olan bir uid buffer'ını free eder; destination'ın uid pointer'ını dangling bırakır.
  3. write_lease'e (vmnetdhcp+0x16e0) ulaşan sonraki bir operasyon freed uid'a erişir ve use-after-free'yi tetikler.
  4. Freed allocation'ı kontrollü içerikle yeniden ele geçirmek (reclaim), UAF'ten host code execution'a giden yoldur.

Beklenen gözlemlenebilir: bir guest'ten gelen anormal bir DHCPDISCOVERDHCPRELEASE dizisinin ardından vmnetdhcp crash/restart.

Warning

Bug sınıfı için belgelenmiş, patch'lenmiş issue. Yalnızca kavramsal — reclaim object seçimi veya host layout yok.

Detection

  • Host-side: vmnetdhcp crash'leri/restart'ları ve heap-corruption telemetry'si.
  • Network-side: VMware virtual network'teki bir guest'ten aynı lease için anormal / hızlı DHCPDISCOVERDHCPRELEASE dizileri.

Mitigation

  • VMSA-2020-0004'ü uygulayın: VMware Workstation 15.5.2 ve Fusion 11.5.2'de düzeltildi (CVSS 9.3). Patch'lenmiş supersede_lease, bir pointer-aliasing check ekler ve source/destination uid aynı buffer'a referans verdiğinde free'yi atlar.
  • Defense in depth: host networking servislerini sandbox / least-privilege yapın.

References