Skip to content

Hyper-V VMBus ring-buffer persistent DoS

Authenticated bir guest, host'un doğrulayamadığı malformed VMBus packet'leri gönderir ve Hyper-V host'unu, host yeniden başlatılana kadar her VM'i asan bir resource exhaustion'a sürer (CVE-2011-1872, MS11-047).

Mechanism

Note

VMBus, Hyper-V guest'leri ile host arasındaki high-speed channel'dır. Her device channel bir çift shared-memory ring buffer kullanır (biri inbound, biri outbound); guest'in synthetic driver'ları (örn. netvsc) packet'leri enqueue eder ve host'a sinyal verir; host'un virtualization stack'i (vmswitch.sys ve Virtual Infrastructure Driver vid.sys) onları dequeue edip işler.

CVE-2011-1872, host'un guest-supplied VMBus packet'lerinin belirli sequence'larını yetersiz doğrulaması nedeniyle ortaya çıkar. Crafted bir packet (public Core Security PoC, packet offset 0x20'deki bir length field'ını manipüle etti, örn. 0xffeff'ten büyük bir QWORD ve sıradan "Simple" packet'leri GpaDirect packet'lerine çevirdi), host packet-processing path'ini aşırı resource consumption'a sürer — fiilen Hyper-V server'ında unbounded/looping bir processing state.

Isolation boundary'sini aşar çünkü saldırgan yalnızca tek bir guest içinde administrator hakkına sahip olsa da, malformed packet shared host processing kaynaklarını tüketir. Host VMBus request'lerine servis vermeyi durdurduğunda, o host'taki tüm co-located guest'ler yanıt vermez hâle gelir — tek bir tenant diğer her tenant'a hizmeti reddeder. "Persistent"tir çünkü koşul kendini temizlemez: kurtarmak için host yeniden başlatılmalıdır; bireysel guest'leri yeniden başlatmak yardımcı olmaz.

Warning

Bu yalnızca bir denial-of-service sorunudur — Microsoft host üzerinde code execution ya da privilege elevation'a izin vermediğini not eder. Impact availability'dir: bir untrusted guest tüm host'u ve komşularını çökertebilir.

Walkthrough

Public PoC (Exploit-DB 17401, Core Security), normal driver'ın asla üretemeyeceği malformed bir packet yayabilmesi için guest'in network stack'ine kernel-mode kod inject eder.

Conceptual trigger (from the public Core Security PoC)
Guest side (kernel, illustrative):
  - hook memcpy inside netvsc50.sys
  - when the synthetic NIC assembles an outbound VMBus packet,
    rewrite the packet header:
      packet.type  = GpaDirect      // was "Simple"
      *(QWORD*)(packet + 0x20) = 0x3333333333333333   // oversized length

Host side (vid.sys):
  VidLockObjectShared() validates the length field at +0x20.
  With length > 0xffeff it returns 0xC0370022 and the packet is never
  completed normally -> the host processing path fails to make progress.

Vulnerable bir host'ta (Hyper-V role'üne sahip Windows Server 2008 / 2008 R2 x64) beklenen etki: Hyper-V server VMBus request'lerine yanıt vermeyi durdurur; host'taki tüm guest'ler asılır. Kurtarma bir host restart gerektirir.

Detection

  • Host hang/availability monitoring: Tek bir host'taki tüm guest'ler genelinde (tek bir VM yerine) ani responsiveness kaybı, shared-host bir DoS'un imzasıdır.
  • Hyper-V/VMBus event log'ları ve vmms/vid watchdog timeout'ları; yanıtsızlık penceresini tek bir guest'ten kaynaklanan aktivite ile ilişkilendirin.
  • Host üzerinde resource-exhaustion telemetry (virtualization worker path'inde takılmış CPU, durmuş VMBus channel processing).

Mitigation

  • MS11-047'yi (KB2525835) uygulayın; update, Hyper-V server'ının guest'ten host'a gönderilen VMBus packet'lerini nasıl doğruladığını düzeltir. Kurulumu tamamlamak için bir host restart gereklidir. Etkilenen: Hyper-V role'ü etkin Windows Server 2008 / 2008 R2 x64 (Server Core ve standalone Hyper-V Server dahil).
  • Microsoft hiçbir workaround belirlemedi; patch'lemek remediation'dır.
  • Operasyonel olarak: Shared Hyper-V host'larında guest'ler içinde untrusted kullanıcılara administrative erişim vermeyin; untrusted tenant'ları dedicated host'lara izole edin.

References