Skip to content

Xen PCID TLB flush window (CVE-2019-17346)

Xen XSA-292 / CVE-2019-17346: PCID acceleration etkinken, bir vCPU context switch'i sırasındaki bir timing penceresi, giden address space'ten stale TLB entry'lerinin hayatta kalmasına olanak tanır — bir PV guest info leak, host crash ya da privilege escalation elde edebilir.

Mechanism

Note

PCID (Process-Context Identifiers), CPU'nun TLB entry'lerini address space'e göre tag'lemesine olanak tanır; böylece switch'lerin her şeyi flush etmesi gerekmez ve performans artar. Xen'in PCID desteği tam bir TLB flush yapar ve ardından address space'i switch eder, ama atomic değil. Invariant şudur: giden address space'e ait hiçbir TLB entry'si gelen address space'e taşmaz. XSA-292 bir flush/switch ordering penceresi'dir: tam flush ile gerçek switch arasında, switch ile uzaklaşılan address space'ten ek TLB entry'leri biriktirilebilir ve sonradan asla purge edilmez. Bir PV guest, başka bir context'in belleğine erişmek için bu stale translation'ları kullanabilir.

Aşılan sınır, non-atomic bir flush-then-switch dizisiyle kırılan, address space başına TLB izolasyonudur.

Walkthrough

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

  1. PCID/INVPCID'li ve Xen PCID acceleration etkin hardware'de, hedef address space'i içeren vCPU context switch'leri tetikle.
  2. Flush→switch penceresinde TLB'yi dolduran bir aktivite ayarla; böylece stale entry'ler switch'ten sonra kalıcı olur.
  3. Hayatta kalan translation'ları, başka bir guest'in belleğini okumak (info leak), state'i bozmak ya da host'u crash etmek için kullan.

Warning

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

Detection

  • PCID acceleration'lı Xen build'lerinde anormal cross-context bellek disclosure'ı ya da host instability'si; runtime'da doğrudan gözlemlemek zordur.
  • PV barındıran host'larda pcid/invpcid acceleration'ın etkin olup olmadığını envanterle.

Mitigation

  • xsa292.patch'i uygula (4.7.6, 4.8.4+, 4.9.3+, 4.10.2+, 4.11.x ve unstable'a backport edildi).
  • Workaround'lar: pcid=0 ya da invpcid=0 ile boot et; yalnızca HVM/PVH guest'ler çalıştır.
  • Etkilenen: PCID-capable hardware üzerindeki x86 PV guest'ler (HVM/PVH ve ARM etkilenmez).

References