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.
- Bir guest, memory-allocation request'i
MAX_NUMNODESdeğerinde veya üzerinde bir NUMA node selector taşıyan bir hypercall path'ine ulaşır. alloc_heap_pages(), node-başına yapılarını kontrol edilmemiş değerle indeksler.- 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.