Skip to content

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):

  1. 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.
  2. Restart boyunca yanlış işlenen partial flag'leri / artakalan type reference'ı exploit ederek type count'ları desenkronize et.
  3. 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