Skip to content

Xen linear pagetable refcount reset on resume (CVE-2019-19578)

Xen XSA-309 / CVE-2019-19578: Xen, kısmen valide edilmiş bir PV page table'ının validation'ını resume ettiğinde linear_pt_entry count'larını yanlış şekilde düşürür; bu da bir PV guest'in yasaklanmış linear-pagetable zincirleri kurmasına olanak tanır — host crash (DoS), privesc/info-leak dışlanmamıştır.

Mechanism

Note

Linear-pagetable tehlikesini sınırlamak için Xen, page başına bir linear_pt_entry count'u izler; böylece bir pagetable aynı anda hem başka pagetable'lara işaret edip hem de onlar tarafından işaret edilemez. Invariant şudur: bu count'lar her validation path'inde doğru kalır. XSA-309, resume path'inde bir bookkeeping bug'ıdır: pagetable validation preempt edilebilir ve Xen kısmen valide edilmiş bir table'ı validate etmeyi resume ettiğinde bazı linear_pt_entry count'larını yanlış şekilde düşürür. Count'lar yanlış olduğunda guest, count'ların yasaklaması gereken tam o linear-pagetable zincirlerini yeniden oluşturabilir ve XSA-240 sınıfı tehlikeyi yeniden açar.

Aşılan sınır, PV pagetable güvenliğini zorlayan reference-count accounting'inin bütünlüğüdür.

Walkthrough

Public reference: Xen Security Advisory 309 ve NVD CVE-2019-19578. Conceptual path (advisory sınıfı belirtir):

  1. Bir PV guest olarak, büyük bir page table'ın validation'ını başlat; böylece Xen preempt eder ve onu kısmen valide edilmiş olarak işaretler.
  2. Resumption'ı, linear_pt_entry count'larının yanlış düşürüleceği şekilde ayarla.
  3. Artık tutarsız olan count'ları yasaklanmış bir linear-pagetable zinciri kurmak için exploit et.
  4. Ortaya çıkan state, guest'in host'u crash etmesine olanak tanır; privilege escalation / information leak dışlanmamıştır.

Warning

Bug sınıfı için belgelenmiş tarihsel, patch'lenmiş bir sorun. Yalnızca conceptual.

Detection

  • Büyük/preemptible pagetable validation'ları ardından linear-pagetable oluşturma yapan PV guest'lerle ilişkili hypervisor crash'leri.
  • Instrument edilen yerlerde pagetable type/refcount accounting'inin integrity izlemesi.

Mitigation

  • xsa309.patch'i uygula (Xen 4.8'den unstable'a kadar).
  • Linear pagetable'ları CONFIG_PV_LINEAR_PT=n ya da pv-linear-pt=false ile devre dışı bırak.
  • Etkilenen: tüm Xen, yalnızca x86 PV guest'ler (HVM/PVH ve ARM etkilenmez); yalnızca linear pagetable'ların etkin olduğu yerlerde geçerli. NetBSD bunları kullanır; Linux/MiniOS kullanmaz. Untrusted guest'ler için HVM/PVH'yi tercih et.

References