Skip to content

Xen PV early TLB flush type-ref race privesc (CVE-2022-26362)

Xen XSA-401 / CVE-2022-26362: _get_page_type() içinde bir TLB flush çok erken yapılır ve bir race window açar; bu window'da bir x86 PV guest, writeability yasaklanmadan önce writeable bir mapping'i yeniden kurabilir — tam host kontrolüne escalate olur.

Mechanism

Note

Xen, PV pagetable güvenliğini page başına type reference count'larla sağlar: bir page pagetable olmadan önce, ona ait tüm writeable mapping'ler kaybolmuş olmalıdır. _get_page_type() writeability'yi kaldırır ve TLB'yi flush eder, böylece cache'lenmiş hiçbir writeable translation hayatta kalmaz. Invariant şu: writeability'nin kaldırılması ve TLB flush, guest'e göre atomik bir adım oluşturur. XSA-401 bir TLB-flush-ordering race: flush çok erken gerçekleşir ve guest'in (başka bir vCPU üzerinde) writeability gerçekten yasaklanmadan önce read/write mapping'i yeniden kurabildiği bir window bırakır. Guest böylece Xen'in artık pagetable olarak ele aldığı bir page'e writeable bir mapping tutar — type system alt edilir.

Aşılan sınır, PV pagetable type promotion'ının atomikliğidir.

Walkthrough

Public reference: Xen Security Advisory 401 ve NVD CVE-2022-26362 (Jann Horn, Project Zero). Kavramsal yol (advisory sınıfı belirtir):

  1. Bir PV guest olarak, ikinci bir vCPU'dan race ederken hedef bir page üzerinde _get_page_type()'ı sür.
  2. Early-flush window'u içinde page'in writeable bir mapping'ini yeniden oluştur.
  3. Page bir pagetable type'a promote edildikten sonra, elde tutulan writeable mapping'i kullanarak pagetable entry'lerini düzenle ve tam host kontrolü elde et.

Warning

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

Detection

  • Runtime detection zordur (timing race). Birden çok vCPU üzerinde pagetable pin/type-change operasyonlarını yoğun şekilde çalıştıran PV guest'lere dikkat et.
  • Read-only PV page'lerinin integrity monitoring'i.

Mitigation

  • xsa401 patch'lerini (xen-unstable, Xen 4.13.x–4.16.x) uygula. XSA-402, mantıksal olarak önce XSA-401'in yerinde olmasına bağlıdır.
  • Workaround: x86 PV guest desteğini devre dışı bırak; yalnızca HVM/PVH çalıştır.
  • Etkilenen: tüm Xen, yalnızca x86 PV guest'ler.

References