Xen XSA-182 PV pagetable / Qubes escape¶
Xen XSA-182 / CVE-2016-6258 ("bunker buster" / Qubes escape): PV pagetable update fast-path'inin bit-safety varsayımları fazla geniştir; bu da bir PV guest'in read-only self-referential bir pagetable entry'i writable'a çevirmesine ve host-visible mapping'ler üzerinde arbitrary kontrol kazanmasına izin verir.
Mechanism¶
Note
Xen PV guest'leri kendi page table'larını mod_l{1..4}_entry() üzerinden
günceller; bu fonksiyonun, yalnızca "safe" bit'ler değiştiğinde tam
re-validation'ı atlayan bir fast-path'i vardır (Access/Dirty bit clearing için
tasarlanmıştır). Isolation invariant'ı şudur: full-validation yolu,
write permission ile self-referential (linear) bir pagetable entry
oluşturmayı reddeder — Xen'in get_linear_pagetable check'i ("Attempt to
create linear p.t. with write perms"). Quarkslab'ın analizine göre fast-path
present/MFN eşitliğine bakıyor ve _PAGE_RW'yi safe sayıyordu; böylece bir
guest işlemi iki hypercall'a bölebiliyordu: önce read-only bir self-reference
oluştur, sonra fast-path üzerinden yalnızca RW bit'ini çevir ve böylece
linear-pagetable check'ini bypass et. Sonuç, guest'in kendi page table'larının
guest-writable bir mapping'idir — host-visible page mapping'ler üzerinde
arbitrary kontrol, yani host privilege escalation. Bu, meşhur Qubes OS
escape'inin (QSB-024) arkasındaki bug'dı.
Bu, Ouroboros pagetable araştırmasının self-reference tarafıdır; bkz. Xen Ouroboros hypercall vulnerabilities and the sibling superpage bug XSA-148 PV pagetable fast-path validation.
Walkthrough¶
Public reference: XSA-182, NVD CVE-2016-6258, Quarkslab'ın writeup'ı ve Qubes QSB-024. Kavramsal yol (temsili; public materyal — silahlandırılmış chain yok):
- Normal bir hypercall üzerinden, kendisini RW olmadan referans eden bir L4 entry oluştur (izin verilen read-only bir self-reference).
mod_l4_entry()'i tekrar çağır ve yalnızca RW flag'ini değiştir; müsamahalı fast-path (present/MFN match) onu onaylar ve linear-pagetable invariant check'ini atlar.- Ortaya çıkan writable self-mapping, page directory'i guest write'larına açar — arbitrary machine-frame R/W. (Quarkslab sonraki dom0 adımlarını anlatır; bunlar post-primitive aşamadır, yalnızca kavramsaldır.)
Beklenen gözlem: mevcut self-referential high-level entry'lerde yalnızca
_PAGE_RW'yi toggle eden pagetable update'leri yayan PV guest'ler.
Warning
Bug sınıfı için belgelenmiş, tarihsel ve patch'lenmiş bir issue. Yalnızca kavramsal.
Detection¶
- Mevcut high-level (L4/L3) entry'lerde — özellikle self-referential olanlarda —
yalnızca
_PAGE_RW'yi toggle edenmmu_updateupdate'leri yayan PV guest'leri izle. - Patch sonrası, strict-path reddi ("Attempt to create linear p.t. with write perms") başlı başına bir indicator'dır.
Mitigation¶
xsa182*.patch'i uygula. Etkilenen: NVD Xen 3.4.0 ile 4.7.0 arasını listeler (advisory: "all versions"); yalnızca x86 PV guest'ler — HVM ve ARM vulnerable değil. Qubes düzeltilmiş Xen build'lerini out of band gönderdi (QSB-024). Untrusted guest'ler için HVM/PVH'yi tercih et.
References¶
- Xen Security Advisory 182 (CVE-2016-6258), https://xenbits.xen.org/xsa/advisory-182.html
- NVD, CVE-2016-6258, https://nvd.nist.gov/vuln/detail/CVE-2016-6258
- Quarkslab, "Xen exploitation part 3: XSA-182, Qubes escape", https://blog.quarkslab.com/xen-exploitation-part-3-xsa-182-qubes-escape.html
- Qubes Security Bulletin QSB-024, https://github.com/QubesOS/qubes-secpack/blob/master/QSBs/qsb-024-2016.txt