Xen memory_exchange OOB / privesc (CVE-2017-7228)¶
Xen XSA-212 / CVE-2017-7228:
XENMEM_exchangehypercall'ındaki yetersiz bir bounds check, kötü niyetli bir 64-bit PV guest'in guest array'inin ötesindeki hypervisor belleğini read/write etmesine olanak tanır — privilege escalation, host crash ya da info leak.
Mechanism¶
Note
XENMEM_exchange hypercall'ı, bir guest'in bir page frame setini farklı
sıralanmış bir setle takas etmesine olanak tanır ve guest-supplied array'ler
üzerinde çalışır. Invariant şudur: tüm array indexing'i guest'in kendi belleği
içinde kalır. XSA-212 bir yetersiz input check'tir: XSA-212 advisory'sine göre daha
önceki XSA-29 fix'i XENMEM_exchange input'unda yetersiz bir check getirdi
("The XSA-29 fix introduced an insufficient check on XENMEM_exchange input");
bu yüzden bir caller, Xen'in belirlenen
guest array'inin dışındaki belleğe erişmesine yol açan index/extent değerleri
sürebilir. Out-of-bounds erişim hypervisor-controlled belleğe düştüğü için,
64-bit bir PV guest Xen'in kendisine karşı bir out-of-bounds read/write
primitive'i kazanır.
Aşılan sınır, bir memory-management hypercall'ındaki aritmetik bir bounds hatası aracılığıyla guest/hypervisor bellek izolasyonudur.
Walkthrough¶
Public reference: Xen Security Advisory 212 ve NVD CVE-2017-7228. XSA-212 advisory'si bug'ı Google Project Zero'dan Jann Horn'a atfeder ("This issue was discovered by Jann Horn of Google Project Zero"). Conceptual path (advisory sınıfı belirtir):
- 64-bit bir PV guest olarak, yetersiz check'i geçen crafted extent/order ve
array parametreleriyle
XENMEM_exchange'i çağır. - Xen, guest array'ini aşıp hypervisor belleğine index'ler ve OOB erişim doğurur.
- OOB read/write'ı, hypervisor state'ini bozmak ve tam host kontrolüne yükselmek (ya da crash / veri leak) için kullan.
Warning
Bug sınıfı için belgelenmiş tarihsel, patch'lenmiş bir sorun. Yalnızca conceptual — offset ya da exploit layout yok.
Detection¶
- 64-bit PV guest'lerden gelen
XENMEM_exchangeçağrılarının ardından hypervisor crash'leri ya da anormal davranış. - Hypercall auditing mevcut olduğunda, untrusted PV guest'lerden gelen olağandışı
order/extent kombinasyonlu
XENMEM_exchangeçağrılarını işaretle.
Mitigation¶
xsa212.patch'i uygula (Xen 4.4.x'ten 4.8.x'e ve unstable).- Etkilenen: tüm Xen, x86, yalnızca 64-bit PV guest'ler (HVM ve 32-bit PV etkilenmez; ARM etkilenmez). Untrusted tenant'lar için yalnızca HVM / 32-bit PV guest'ler çalıştır; mümkün olduğunda guest kernel kod çalıştırmayı sınırla.
References¶
- Xen Security Advisory 212, "x86: broken check in memory_exchange() permits PV guest breakout", https://xenbits.xen.org/xsa/advisory-212.html
- NVD, CVE-2017-7228, https://nvd.nist.gov/vuln/detail/CVE-2017-7228