Xen PV descriptor-table limit emulation privesc (CVE-2019-18425)¶
Xen XSA-298 / CVE-2019-18425: Xen'in 32-bit PV guest call-gate geçişlerine ait emulation'ı descriptor-table limit'lerini validate edemiyor; bu da 32-bit PV guest user mode'un keyfi descriptor'lar yüklemesine ve guest-kernel ayrıcalığına escalate olmasına olanak veriyor.
Mechanism¶
Note
32-bit PV guest'lerde Xen, user-mode call-gate geçişlerini LDT/GDT üzerinden emulate eder. Invariant şu: emulate edilen bir descriptor reference, descriptor-table limit'ine uymalıdır, böylece user mode sahibi olmadığı descriptor'lara ulaşamaz. XSA-298 bir emulation'da missing limit check: 32-bit guest user-mode çağrılarını call gate'ler üzerinden emulate ederken Xen descriptor-table limit'ini düzgün validate etmez, bu da unprivileged guest kodunun keyfi descriptor'lar yüklemesine izin verir. Bu özellikle guest kernel'in kendisi bir LDT yüklemediğinde — yaygın varsayılan durum — erişilebilir; böylece user mode guest-kernel ayrıcalığına yükselebilir.
Aşılan sınır, denetlenmemiş descriptor-table emulation'ı ile kırılan guest-içi user→kernel ayrıcalık sınırıdır.
Walkthrough¶
Public reference: Xen Security Advisory 298 ve NVD CVE-2019-18425 (Andrew Cooper, Citrix). Kavramsal yol (advisory sınıfı belirtir):
- Kernel'in hiçbir LDT yüklemediği 32-bit bir PV guest'te, Xen'in emulate ettiği bir user-mode call-gate geçişi çalıştır.
- Emulation descriptor-table limit kontrolünü atlar, böylece user mode keyfi bir descriptor yükleyebilir.
- Kontrol edilen descriptor'ı kullanarak guest-kernel ayrıcalığıyla çalış.
Warning
Bug sınıfı için belgelenmiş, tarihsel ve patch'lenmiş bir issue. Yalnızca kavramsal.
Detection¶
- Olağandışı call-gate / LDT operasyonları yapan 32-bit PV guest'ler; guest-içi ayrıcalık anomalileri (bu guest-içi bir escalation, host telemetrisi sınırlı).
- Hangi guest'lerin 32-bit PV olduğunu (tek etkilenen configuration) envantere al.
Mitigation¶
xsa298.patch'i (Xen 4.12+ ve daha eski sürümler için versiyona özgü varyantlar) uygula.- Etkilenen: Xen 3.2+, yalnızca 32-bit PV guest'ler (64-bit PV, HVM, PVH ve Arm etkilenmez). Untrusted tenant'lar için yalnızca HVM/PVH veya 64-bit PV guest çalıştır.
References¶
- Xen Security Advisory 298, "missing descriptor table limit checking in x86 PV emulation", https://xenbits.xen.org/xsa/advisory-298.html
- NVD, CVE-2019-18425, https://nvd.nist.gov/vuln/detail/CVE-2019-18425