Skip to content

Xen VMFUNC emulation NULL deref crash (CVE-2016-10025)

XSA-203: HVM instruction emulator'ı opsiyonel bir vmfunc handler hook'unu NULL kontrolü yapmadan çağırır, dolayısıyla AMD SVM host'larında (hook'un set edilmediği yerde) VMFUNC emulate etmek NULL dereference yapar ve Xen'i crash eder.

Mechanism

Bug sınıfı: opsiyonel bir handler pointer'da eksik NULL check

Xen'in hvm_emulate_ops table'ı, emulator'ın handle etmesi gerekebilecek instruction'lar için function pointer'lar taşır. Intel VMX VMFUNC leaf-0 desteği eklendiğinde, yeni bir opsiyonel hook hvmemul_vmfunc tanıtıldı ve non-VMX platformlarda kasıtlı olarak NULL bırakıldı (AMD SVM'de VMFUNC yok). İhlal edilen invariant: bir opsiyonel op pointer'ı, çağrılmadan önce kontrol edilmelidir. Emulator'ın VMFUNC path'i, önce non-NULL olduğunu doğrulamadan hook üzerinden indirect bir çağrı yaptı. AMD SVM'de pointer NULL'dur, dolayısıyla VMFUNC'u emulation path'ine sokan bir guest, address 0 üzerinden bir çağrıya neden olur — hypervisor context'inde fatal bir dereference. Aşılan sınır host availability'dir: bir guest Xen'i güvenilir şekilde crash eder.

Walkthrough

Yalnızca kavramsal

Public, patch'lenmiş XSA-203 advisory'sine dayanır.

Mantıksal adımlar:

  1. Bir AMD SVM host'unda, bir HVM guest VMFUNC instruction'ının Xen'in x86 instruction emulator'ına yönlenmesine neden olur.
  2. Emulator VMFUNC handling durumuna ulaşır ve hvm_emulate_ops->vmfunc üzerinden indirect bir çağrı yapar.
  3. SVM'de o hook NULL'dur (VMFUNC yalnızca Intel'e özgü bir özelliktir) ve çağrıdan önce hiçbir NULL guard yoktur.
  4. Xen NULL dereference yapar ve crash eder → host Denial of Service.

Emulator path'ine yalnızca HVM guest'ler ulaşabilir; PV guest'ler ulaşamaz. Intel VMX host'ları etkilenmez çünkü orada hook doludur. Fix, VMFUNC handler'ı çağırmadan önce eksik NULL check'i ekler.

Detection

  • AMD hardware'inde, belirli bir HVM guest ile ilişkili olarak NULL instruction pointer'da ya da yakınında bir fault içeren host crash'i / hypervisor panic'i.
  • HVM x86 emulator'ının VMFUNC handling'i içindeki fault'u gösteren crash dump'lar.
  • Xen 4.6+ üzerinde HVM guest çalıştıran AMD SVM host'larıyla sınırla — Intel host'ları ve PV guest'ler kapsam dışıdır, bu da triage'ı hızla daraltır.

Mitigation

  • Patch'le. Xen branch'in için XSA-203'ü uygula (xen-unstable, 4.8.x, 4.7.x, 4.6.x için fix'ler yayımlandı). Patch, VMFUNC handler çağrısından önce NULL guard'ı ekler.
  • Patch'lenmemiş AMD host'larında untrusted HVM guest'leri kısıtla; savunmasız emulator path'ini kaldıran bir configuration toggle'ı yok.

References