Xen Ouroboros hypercall vulnerabilities (Tearing Xen with the Snake)¶
Black Hat USA 2016 "Ouroboros" araştırması (Shangcong Luan, Alibaba Cloud), iki Xen x86 PV pagetable fast-path bug'ı üzerine — XSA-148/CVE-2015-7835 (kontrolsüz superpage'ler) ve XSA-182/CVE-2016-6258 (writable self-referential pagetable) — bir PV guest'e keyfi machine-memory R/W ve host escape verir.
Mechanism¶
Note
Xen PV guest'leri kendi page table'larını yönetir, ama Xen her update'i validate
eder ve pagetable page'lerini MFN başına bir type+refcount sistemi aracılığıyla
read-only tutar. İzolasyon invariant'ı şudur: bir guest asla canlı bir pagetable
üzerinde writable bir mapping elde edemez. mod_l{1..4}_entry() update
handler'ları, bir update yalnızca "güvenli" bit'leri değiştirdiğinde tam
re-validation'ı atlayan bir fast-path'e sahiptir. Ouroboros konuşması bu
varsayımın fazla geniş olduğu iki durumu gösterir: bir guest bir operasyonu
hypercall'lar arasında böler; böylece fast-path, strict path'in reddedeceği bir
bit'i flip eder ve bir pagetable üzerinde writable bir mapping üretir. Guest bir
kez kendi pagetable'larını yazabildiğinde herhangi bir machine frame'i
map'leyebilir — guest'ten host belleğine kaçar.
İki bug:
- XSA-148 / CVE-2015-7835 — large-page (superpage) mapping'lerin kontrolsüz
oluşturulması: L2 fast-path'i, izin verilmeyen flag'ler 0, present-ve-MFN eşleştiği
zaman yeni bir entry'yi onaylar — ama
PSE=1'iW=1ile set etmek yine de geçer ve superpage validation'ı bypass eden writable bir 2 MB mapping verir. Bkz. XSA-148 PV pagetable fast-path validation. - XSA-182 / CVE-2016-6258 — bir self-referential ("Ouroboros") pagetable: Xen'in linear-pagetable check'i yalnızca read-only self-reference'lara izin verir, ama fast-path, present/MFN eşleştiği için mevcut bir read-only self-reference'ın read-write'a flip edilmesine olanak tanır. Bkz. XSA-182 PV pagetable / Qubes escape.
Walkthrough¶
Public reference: Black Hat USA 2016 whitepaper'ı "Exploit Two Xen Hypervisor Vulnerabilities" ve XSA advisory'leri. Conceptual reproduction path (örnekleyici — public materyal; weaponized bir chain yok):
- Normal bir hypercall aracılığıyla, izin verilen bir state'te bir pagetable entry oluştur (örneğin bir read-only self-reference ya da non-PSE bir entry).
- Yalnızca fast-path'in güvenli saydığı bit'i (
Wya daPSE+W) değiştiren ikinci bir update yayınla; bu, permissive fast-path'i tetikler ve invariant check'ini atlar. - Ortaya çıkan writable mapping, canlı bir pagetable'ı guest write'larına maruz bırakır ve keyfi machine-frame read/write verir.
- (Primitive sonrası, yalnızca conceptual.) Whitepaper, guest ve hypervisor'ın bir address space paylaşmasından faydalanarak bir hypercall stub'ını attacker koduna yönlendirmek için per-guest hypercall page'inin ve hypervisor hypercall table'ının — her ikisi de yarı kullanılmamış — hedef olarak bulunmasını anlatır.
Warning
Bug sınıfı için belgelenmiş tarihsel, patch'lenmiş sorunlar. Yalnızca conceptual — exploit offset'i ya da shellcode yok.
Detection¶
- Mevcut high-level entry'ler üzerinde, özellikle self-referential olanlarda,
yalnızca
_PAGE_RW'yi toggle eden (ya daPSE+Wset eden) pagetable-update hypercall'ları (mmu_update/mmuext_op) yayınlayan PV guest'leri izle. - Patch sonrası, strict-path reddi ("Attempt to create linear p.t. with write perms") başlı başına bir göstergedir.
Mitigation¶
- XSA-148 ve XSA-182 patch'lerini uygula (validation sıkılaştırıldı; böylece fast-path'ler superpage ve writable-self-reference koşullarını yeniden check eder).
- Untrusted guest'ler için klasik PV yerine HVM/PVH'yi tercih et — burada attack surface'inin tamamı PV pagetable validation'ıdır.
References¶
- S. Luan, "Exploit Two Xen Hypervisor Vulnerabilities" (Ouroboros — Tearing Xen Hypervisor With The Snake), Black Hat USA 2016, https://blackhat.com/docs/us-16/materials/us-16-Luan-Ouroboros-Tearing-Xen-Hypervisor-With-The-Snake-wp.pdf
- Xen Security Advisory 182 (CVE-2016-6258), https://xenbits.xen.org/xsa/advisory-182.html