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/vidwatchdog 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.