Xen VMFUNC emulation NULL deref crash (CVE-2016-10025)¶
XSA-203: HVM instruction emulator'ı opsiyonel bir
vmfunchandler 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:
- Bir AMD SVM host'unda, bir HVM guest
VMFUNCinstruction'ının Xen'in x86 instruction emulator'ına yönlenmesine neden olur. - Emulator VMFUNC handling durumuna ulaşır ve
hvm_emulate_ops->vmfuncüzerinden indirect bir çağrı yapar. - SVM'de o hook NULL'dur (VMFUNC yalnızca Intel'e özgü bir özelliktir) ve çağrıdan önce hiçbir NULL guard yoktur.
- 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.