Hyper-V vmswitch VmsVmNicHandleRssParametersChange OOB read¶
Guest tarafından sağlanan bir RSS parameters OID'i, host'un
vmswitch.sysiçinde out-of-bounds okuma yapmasına yol açar; bir child VM'den root partition bug-check'e sokulur.
Mechanism¶
Bug sınıfı ve isolation boundary
Bu, vmswitch.sys içinde bir out-of-bounds read (OOBR)'dır; VMBus
üzerinden gönderilen bir NDIS OID request ile bir child partition'dan
erişilebilir.
Receive Side Scaling (RSS), gelen network paketlerini bir indirection
table ve bir hash key kullanarak birden çok CPU'ya dağıtır. Bir guest, RSS'i
payload'u bir NDIS_RECEIVE_SCALE_PARAMETERS structure'ı olan bir OID
(OID_GEN_RECEIVE_SCALE_PARAMETERS) göndererek configure eder. Bu structure,
RSS key ile indirection table'ı inline taşımaz; bunun yerine request buffer'ı
içinde başka bir yere işaret eden offset ve length alanları taşır
(HashSecretKeyOffset / HashSecretKeySize, IndirectionTableOffset /
IndirectionTableSize).
VmsVmNicHandleRssParametersChange, key ile indirection table'ı bulmak için
bu guest-controlled offset ve size alanlarını tüketir. Bu alanlar request
buffer'ın sınırlarına karşı validate edilmediğinden, bir attacker onları
allocation'ın sonundan ötesine işaret ettirebilir; bu da host'un RSS
configuration'ı uygularken out-of-bounds okumasına neden olur.
Diğer vmswitch OID bug'larıyla aynı yapısal nedenden ötürü VM isolation boundary'sini aşar: offset'ler güvenilmeyen child partition'da yazılır, ama root (host) partition'daki kernel kodu tarafından dereference edilir. Guest böylece host tarafındaki bir okumayı kontrol eder.
Sibling ayrımı: Bu cell, RSS parameters'taki offset+size çiftlerini
validate etmeyen ayrı bir bug'tır (CVE-2016-0689, OID_GEN_RECEIVE_SCALE_PARAMETERS).
Aynı bulletin'deki (MS16-045) IPsec varyantı
VmsPtpIpsecTranslateAddv2toAddv2Ex
ise farklı bir function olup IPsec SA-add structure'ındaki length/count field'ını
(CVE-2016-0690) doğrulamaz; ikisi farklı OID ailesi ve farklı root-cause'a sahiptir.
Etki
Açıklanan etki, bir guest-to-host bug check (DoS)'a yol açan bir OOBR'dır. Bu spesifik routine için herhangi bir host code-execution iddiası doğrulanmamıştır; bunu kavramsal düzeyde tut.
Walkthrough¶
Kamuya kataloglanmış OOBR'ı yansıtan kavramsal reproduction yolu:
-
Guest'ten, VMBus üzerinden synthetic NIC'e
OID_GEN_RECEIVE_SCALE_PARAMETERStipinde bir OID set request gönder. -
RSS parameters'ı, bir offset+size çifti buffer'ın ötesine işaret edecek şekilde oluştur:
// Illustrative shape of the RSS parameters the guest controls.
// vmswitch's VmsVmNicHandleRssParametersChange uses these offset/size
// fields to find the key & indirection table inside the request.
typedef struct _NDIS_RECEIVE_SCALE_PARAMETERS {
NDIS_OBJECT_HEADER Header;
USHORT Flags;
USHORT BaseCpuNumber;
USHORT HashInformation;
USHORT IndirectionTableSize; // attacker-controlled
ULONG IndirectionTableOffset; // attacker-controlled, beyond buffer
USHORT HashSecretKeySize; // attacker-controlled
ULONG HashSecretKeyOffset; // attacker-controlled, beyond buffer
// ...
} NDIS_RECEIVE_SCALE_PARAMETERS;
- Örneğin
IndirectionTableOffset'i,Offset + Sizegerçek request length'ini aşacak şekilde ayarla. Host, ima edilen bölgeden okur; eğer orası unmapped ise root partition bug-check verir.
Beklenen host tarafı gözlem
Bu yalnızca kavramsal bir yoldur — özgün, silaha dönüştürülmüş bir chain değil. Kamuya isimlendirilmiş function ve OID'in ötesindeki field offset'leri iddia edilmemektedir.
Detection¶
- RSS configuration / NIC OID handling sırasında faulting frame'de
vmswitch.sysbulunan host bug check'leri. - Bir host crash'inin hemen öncesindeki bir guest NIC reconfiguration ile korele olan Hyper-V-VmSwitch operational event-log kayıtları.
- Bir guest'in, offset+size alanları request length'ini aşan
OID_GEN_RECEIVE_SCALE_PARAMETERSrequest'leri gönderdiğini gösteren VMBus/NDIS telemetrisi — net bir out-of-bounds göstergesi. - Tek bir VM'in tekrar tekrar host crash'leri tetiklemesi güçlü bir tampering sinyalidir.
Mitigation¶
- Microsoft'un patch'ini uygula. Bu OOBR, CVE-2016-0689 olarak kataloglandı ve Hyper-V vmswitch security update'inde (MS16-045 Hyper-V bülteni) düzeltildi. Patch'li kod, RSS key ile indirection table'ı dereference etmeden önce her offset/size çiftini request bounds'a karşı validate eder.
- Hyper-V host'larını cumulative update'lerle güncel tut;
vmswitch.sys'teki OID-handling düzeltmeleri normal Windows servicing kanalı üzerinden gelir. - Mümkün olduğunda host başına güvenilmeyen tenant sayısını sınırla; RSS OID yoluna ulaşmak için yalnızca guest seviyesinde erişim gerekir.
References¶
- Hyper-V Researches History (gerhart01/Hyper-V-Internals) — catalog of vmswitch OOBR functions and CVEs
- Blue Frost Security — Microsoft Hyper-V: Multiple Vulnerabilities in vmswitch.sys (advisory BFS-SA-2021-001, Wayback arşiv kopyası)
- Akamai / SafeBreach — Hyper-V vmswitch OID request validation vulnerability class