Skip to content

Hyper-V vmswitch VmsVmNicHandleRssParametersChange OOB read

Guest tarafından sağlanan bir RSS parameters OID'i, host'un vmswitch.sys iç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:

  1. Guest'ten, VMBus üzerinden synthetic NIC'e OID_GEN_RECEIVE_SCALE_PARAMETERS tipinde bir OID set request gönder.

  2. 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;
  1. Örneğin IndirectionTableOffset'i, Offset + Size gerç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
*** Fatal System Error
Bug check in vmswitch.sys
Faulting routine: VmsVmNicHandleRssParametersChange
Access type: read past end of RSS parameters request buffer

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.sys bulunan 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_PARAMETERS request'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