Skip to content

Xen alloc_heap_pages NUMA node OOB (CVE-2017-14316)

alloc_heap_pages() içinde guest-etkili bir NUMA node argümanı üzerindeki eksik bir upper-bound kontrolü, out-of-bounds bir array erişiminin heap free-list array'lerinin ötesine ulaşmasına ve böylece hypervisor'ın ele geçirilmesine olanak tanır.

Mechanism

Bug sınıfı / invariant

alloc_heap_pages(), bir node değeriyle indekslenen NUMA-node-başına bir free list seçer. Kod yalnızca sentinel NUMA_NO_NODE durumunu koruyordu ama node >= MAX_NUMNODES'i reddetmekte başarısız oldu. İhlal edilen invariant klasik array bounds invariant'ıdır: attacker-etkili bir index, kullanılmadan önce array'in üst sınırına karşı doğrulanmalıdır. Range dışı bir node ile, node free-list / metadata array'lerine indeksleme out-of-bounds memory üzerinde okuma ve işlem yapar ki bu Xen içinde arbitrary code execution'a yönlendirilebilir.

Walkthrough

Yalnızca kavramsal

XSA-231'den üst düzey yeniden kurulum.

  1. Bir guest, memory-allocation request'i MAX_NUMNODES değerinde veya üzerinde bir NUMA node selector taşıyan bir hypercall path'ine ulaşır.
  2. alloc_heap_pages(), node-başına yapılarını kontrol edilmemiş değerle indeksler.
  3. Out-of-bounds erişim komşu hypervisor verisini bozar ve (doğru heap layout altında) Xen context'inde execution'a yol açan bir primitive sağlar.

Detection

  • Akla yatkın olmayan/range dışı NUMA node id'leri ile allocation talep eden hypercall'lar.
  • Tek bir domain'e bağlı hypervisor crash'leri veya memory-management assertion'ları.
  • Host telemetrisi: beklenmedik Xen page allocator fault'ları.

Mitigation

  • node < MAX_NUMNODES'i doğrulayan XSA-231 patch'ini uygula (tüm branch'ler: 4.5–4.9 ve unstable düzeltmeler aldı). Bağımsız bir workaround yoktur.
  • Defense in depth: memory/NUMA'yı etkileyen kontrolleri yalnızca trusted toolstack bileşenlerine ver.

References