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):
- Bir PV guest olarak, ikinci bir vCPU'dan race ederken hedef bir page üzerinde
_get_page_type()'ı sür. - Early-flush window'u içinde page'in writeable bir mapping'ini yeniden oluştur.
- 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¶
xsa401patch'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¶
- Xen Security Advisory 401, "x86: race in PV pagetable type-reference handling / early TLB flush", https://xenbits.xen.org/xsa/advisory-401.html
- NVD, CVE-2022-26362, https://nvd.nist.gov/vuln/detail/CVE-2022-26362