Xen restartable PV type-change privesc (CVE-2019-19580)¶
Xen XSA-310 / CVE-2019-19580: restartable PV page type-change operasyonlarına yönelik XSA-299 fix'inin kaçırdığı corner case'ler, partial-validation flag'lerini ve fazladan type reference'ları yanlış işler — malicious bir PV guest yöneticisi host ayrıcalığına escalate olur.
Mechanism¶
Note
PV pagetable güvenliği, page başına type reference count'lara ve
validation/de-validation'ın accounting'i kaybetmeden restartable
(preemptible) olmasına dayanır. XSA-299 type change'leri restartable yaptı;
XSA-310 ise onun kaçırdığı corner case'leri düzeltir. Invariant şu:
restart boyunca, alloc_lN_table/free_lN_table'daki partial-validation
flag'leri, vCPU page destruction ve relinquish_memory, type reference'ları
tam olarak dengede tutar. Bug, bu reference'ları tutarsız bırakır (örn.
fazladan bir type ref tutulur), bu da bir guest'in bir page'in aynı anda hem
writeable hem de pagetable olarak type'landığı bir state'e ulaşmasına olanak
verir — type system çöker.
Aşılan sınır, restartable PV type-reference accounting'inin bütünlüğüdür.
Walkthrough¶
Public reference: Xen Security Advisory 310 ve NVD CVE-2019-19580. Kavramsal yol (advisory sınıfı belirtir):
- Bir PV guest olarak, restartable type-change operasyonlarını (LN table'ların allocation/free'si, vCPU teardown) sür, böylece Xen onları preempt edip resume etsin.
- Restart boyunca yanlış işlenen partial flag'leri / artakalan type reference'ı exploit ederek type count'ları desenkronize et.
- Tutarsızlığı kullanarak pagetable olarak type'lanan bir page'e writeable erişim elde et, host ayrıcalığına escalate ol.
Warning
Bug sınıfı için belgelenmiş, tarihsel ve patch'lenmiş bir issue. Yalnızca kavramsal.
Detection¶
- Pagetable type change'lerini / vCPU teardown'ı yoğun şekilde çalıştıran PV guest'ler; instrument edilmiş yerlerde hypervisor type-reference assertion'ları.
- PV altında read-only kalması gereken page'lerin integrity monitoring'i.
Mitigation¶
- Üç XSA-310 patch'ini (vcpu page destruction, table alloc/free'de partial-flags
korunması,
relinquish_memory'de fazladan type-ref handling) uygula; Xen 4.8–4.13 ve unstable. - Workaround: yalnızca HVM/PVH guest'ler ya da shim mode'da PV guest'ler çalıştır.
- Etkilenen: güvenlik desteği olan tüm Xen, yalnızca x86 PV guest'ler.
References¶
- Xen Security Advisory 310, "Further issues with restartable PV type change operations", https://xenbits.xen.org/xsa/advisory-310.html
- NVD, CVE-2019-19580, https://nvd.nist.gov/vuln/detail/CVE-2019-19580