Skip to content

Xen memory_exchange OOB / privesc (CVE-2017-7228)

Xen XSA-212 / CVE-2017-7228: XENMEM_exchange hypercall'ı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):

  1. 64-bit bir PV guest olarak, yetersiz check'i geçen crafted extent/order ve array parametreleriyle XENMEM_exchange'i çağır.
  2. Xen, guest array'ini aşıp hypervisor belleğine index'ler ve OOB erişim doğurur.
  3. 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