Skip to content

Hyper-V vmswitch RNDIS OID arbitrary host read (Azure region takedown)

Guest-supplied bir RNDIS OID request, vmswitch.sys'te doğrulanmamış bir pointer dereference'e ulaşır ve bir VM'in host kernel belleğini okumasına/çökertmesine izin verir — tüm bir Azure region'ını çökertebilecek bir CVSS 9.9 guest-to-host bug'ı (CVE-2021-28476).

Mechanism

Note

vmswitch.sys, host kernel'de çalışan Hyper-V virtual-switch driver'ıdır. Guest synthetic NIC'leri onunla VMBus üzerinden RNDIS, yani Remote NDIS protokolünü kullanarak konuşur; buna adapter'ı yapılandıran/sorgulayan OID (Object Identifier) request'leri dahildir. Bazı OID'ler meşru olarak hardware seviyesindeki yapılara (offloading, IPsec, SR-IOV) atıf yapar ve bu nedenle host'un NDIS stack'i için anlamlı pointer'lar/handle'lar taşır.

CVE-2021-28476, OID_SWITCH_NIC_REQUEST'e bağlı handler'dadır (VmsIfrInfoParams_OID_SWITCH_NIC_REQUEST). İki açık birleşir:

  1. Trust/design flaw — host, bir guest VM bunları asla originate etmemesi gerekse de OID_SWITCH_NIC_REQUEST mesajlarını bir guest'ten kabul eder.
  2. Missing validation — handler, request'te taşınan bir pointer'ı doğrulamadan dereference eder. Public PoC, crash'i r10 deadbeefbaadc0de gibi bir attacker değeri tutarken mov ecx, dword ptr [r10+20h]'de gösterir.

Guest o pointer'ı kontrol ettiği ve host onu bir host virtual address olarak dereference ettiği için, guest doğrudan host kernel context'inde bir arbitrary read primitive (ve bir crash/DoS) elde eder — VM isolation boundary'sini tek bir tenant'tan shared host'a aşar. Birçok tenant'ın Hyper-V host'larını paylaştığı Azure'da, bu bir VM'in host belleğini okuyabileceği ya da host'ları ölçekte çökertebileceği anlamına geliyordu — "tüm cloud region'larını çökertmek." Microsoft bunu CVSS 9.9 olarak derecelendirdi ve Mayıs 2021'de patch'ledi.

Warning

Bug, yaklaşık Ağustos 2019'dan itibaren build'lerde gönderildi ve Mayıs 2021 fix'inden önce bir yıldan fazla production'da kaldı. Primitive arbitrary read / DoS'tur; onu tam RCE'ye çevirmek ek çalışma gerektirir ama co-tenant host'larının DoS'u anlıktır.

Walkthrough

Ophir Harpaz (Guardicore) ve Peleg Hadar (SafeBreach) tarafından, coverage-guided fuzzing'in hypervisor-aware bir adaptasyonu olan hAFL1 kullanılarak bulundu. Crash, modifiye edilmiş Hyper-V driver'larına sahip bir Linux guest'ten erişilebilir.

Conceptual trigger path (from the public PoC write-up)
Guest (modified netvsc): cause an OID_SWITCH_NIC_REQUEST to be emitted, e.g.
  ifconfig eth0 hw ether 00:11:22:33:44:55     # hits netvsc_set_mac_addr

Host vmswitch.sys dispatch (illustrative):
  RndisDevHostHandleSetMessage
    -> VmsIfrInfoParamsNdisOidRequestBuffer
       -> VmsIfrInfoParams_OID_SWITCH_NIC_REQUEST   <-- vulnerable

Crash site (windbg, from PoC):
  vmswitch!VmsIfrInfoParams_OID_SWITCH_NIC_REQUEST:
    mov  ecx, dword ptr [r10+20h]   ; r10 = deadbeefbaadc0de (guest-controlled)
  => MEMORY_MANAGEMENT / arbitrary read of host VA

Vulnerable bir host'ta beklenen etki: Guest-controlled bir değer bir host kernel pointer olarak dereference edilir ve bir host-kernel read ya da bugcheck (host DoS) üretir.

Detection

  • Belirli bir guest'in network aktivitesiyle ilişkilendirilmiş vmswitch.sys'ten kaynaklanan host bugcheck'leri; OID-request dispatch path'ine atıf yapan host kernel crash dump'larını toplayın ve triyaj edin.
  • Anormal RNDIS trafiği: OID_SWITCH_NIC_REQUEST yayan bir guest (guest'lerin originate etmemesi gereken) başlı başına güçlü bir göstergedir.
  • Shared bir host'ta tek bir tenant'a izole edilmiş tekrarlanan host network-stack instability.

Mitigation

  • CVE-2021-28476 için Mayıs 2021 Microsoft güvenlik update'ini uygulayın; fix, guest-originated/invalid OID request'leri pointer dereference edilmeden önce reddedilecek şekilde validation ekler. Etkilenen ürünler Hyper-V'ye sahip Windows 7/8.1/10 ve Windows Server 2008–2019 sürümlerini kapsar.
  • Hyper-V host'larını patch'lenmiş bir servicing baseline'da tutun; multi-tenant host'larda guest network driver'larını host kernel'a untrusted input olarak ele alın.

References