Skip to content

Xen PV unbounded pagetable iteration DoS (CVE-2018-12891)

Xen XSA-264 / CVE-2018-12891: nadiren çalıştırılan birkaç x86 PV MMU code path'i preemption check'lerini atlar, böylece multi-vCPU bir PV guest sınırsız uzun süren pagetable operasyonlarını zorlayıp bir physical CPU'yu süresiz olarak işgal edebilir (DoS).

Mechanism

Note

Uzun süren PV MMU operasyonları normalde preemptible'dır: Xen, bir guest'in bir physical CPU'yu tekeline alamaması için yield etmesi gerekip gerekmediğini periyodik olarak kontrol eder. Invariant şu: her uzun süren pagetable path'i böyle bir preemption check içerir. XSA-264 bir missing-preemption bug: x86 PV MM handling içinde nadiren ulaşılan birkaç code path bu check'ten yoksundur. Malicious multi-vCPU bir guest bu path'leri tekrar tekrar sürerek operasyonun yield etmeden iterate etmesini sağlayabilir ve bir physical CPU'yu süresiz olarak meşgul tutar.

Aşılan sınır, adil scheduling / host availability'dir — guest tarafından kontrol edilen iş, hypervisor içinde sınırsız çalışır.

Walkthrough

Public reference: Xen Security Advisory 264 ve NVD CVE-2018-12891. Kavramsal yol (advisory sınıfı belirtir):

  1. Multi-vCPU bir PV guest'ten, non-preemptible MM path'lerinden birine yönlenen pagetable state'i oluştur.
  2. O path'i tekrar tekrar tetikleyerek Xen'in bir preemption point olmadan uzun süre iterate etmesini sağla.
  3. Operasyonu işleyen physical CPU belirsiz bir süre kullanılamaz hale gelir — denial of service.

Warning

Bug sınıfı için belgelenmiş, tarihsel ve patch'lenmiş bir issue. Yalnızca kavramsal.

Detection

  • Tek bir guest'in MM operasyonlarını işleyen hypervisor içinde ~%100'de takılı kalan bir physical CPU; scheduler starvation / watchdog uyarıları.
  • Yoğun pagetable manipulation yapan multi-vCPU PV guest'lerle ilişkilendir.

Mitigation

  • Eksik preemption check'lerini ekleyen xsa264.patch'i (unstable) / xsa264-4.10.patch'i (4.10.x–4.6.x) uygula.
  • Workaround: yalnızca HVM/PVH guest'ler ya da single-vCPU PV guest'ler çalıştır.
  • Etkilenen: Xen 3.4+, yalnızca x86 multi-vCPU PV guest'ler (HVM/PVH, single-vCPU PV ve Arm etkilenmez).

References