Skip to content

Xen XSA-105 x86 instruction-emulation guest privilege escalation

Xen XSA-105 / CVE-2014-7155: HLT, LGDT, LIDT ve LMSW'nin x86 emulation'ında eksik supervisor-mode permission check'leri, unprivileged HVM guest user kodunun privileged instruction'lar çalıştırmasına olanak verir — bir guest user → guest kernel escalation'ı.

Mechanism

Warning

Slug alias'ı "nobody to root" bir host escape'i ima eder; ancak birincil kaynaklar (XSA-105, CVE-2014-7155) escalation'ın guest içinde (guest user → guest kernel) ve yalnızca HVM x86 guest'lerde olduğunu gösterir. İçerik bunu yansıtır.

Note

Xen'in x86 instruction emulator'ı (x86_emulate), CPU bazı instruction'ları doğrudan çalıştıramadığında onları emulate eder (örn. MMIO'daki operand'lar, pagetable update'lerine yakın 32-bit PAE context'leri ya da bir guest'in bir instruction'ı invalid-opcode trap'inden sonra değiştirmesi). Bir guest içindeki izolasyon invariant'ı, privileged instruction'ların yalnızca supervisor mode'dan (CPL 0) çalışmasıdır. XSA-105 bir missing privilege-level check: HLT, LGDT, LIDT ve LMSW'nin emulation'ı, vCPU'nun supervisor mode'da olup olmadığını doğrulamadı. Dolayısıyla unprivileged (CPL > 0) HVM guest user kodu, bu instruction'lardan birini emulate ettirebilir ve böylece privileged bir operasyon çalıştırabilir — örn. LIDT aracılığıyla kendi IDT'sini yükleyerek — guest user'dan guest kernel'e escalate olur.

Bu, "emulation'da permission check'i unuttu" sınıfıdır; daha geniş emulator yüzeyini VM-exit handler interception ile karşılaştır.

Walkthrough

Public reference: Xen Security Advisory 105 ve NVD CVE-2014-7155. Kavramsal yol (açıklayıcı; advisory sınıfı belirtir):

  1. HVM guest user-mode (CPL > 0) kodu olarak, HLT/LGDT/LIDT/LMSW'den birinin emulate edilmesini sağla — örn. bir MMIO operand'ı, PAE-mode pagetable'a-bitişik path ya da belgelenen invalid-opcode-sonra-rewrite hilesi aracılığıyla.
  2. Emulator supervisor-mode check'ini atladığı için, caller user ayrıcalığında çalışmasına rağmen privileged operasyon yürütülür (örn. LIDT saldırganın seçtiği bir IDT'yi yükler).
  3. Oradan, descriptor table'ları kontrol etmek guest-kernel ayrıcalığı sağlar.

Beklenen gözlemlenebilir: bir HVM guest içinde user-mode CPL'den kaynaklanan HLT/LGDT/LIDT/LMSW emulation'ı ya da descriptor-table yüklemelerine bağlı guest crash'leri.

Warning

Bug sınıfı için belgelenmiş, patch'lenmiş bir issue. Yalnızca kavramsal.

Detection

  • Non-kernel context'ten gelen IDT/GDT base değişikliklerinin guest-içi integrity monitoring'i.
  • Hypervisor tarafı: HVM guest'lerde CPL > 0'dan ulaşılan HLT/LGDT/LIDT/LMSW emulation'ı.

Mitigation

  • Supervisor-mode permission check'lerini ekleyen xsa105.patch'i uygula. Etkilenen: Xen 3.2.x ve sonrası (NVD: 4.4.x ve öncesi); yalnızca HVM guest'ler, PV etkilenmez, yalnızca x86. Etki guest ile sınırlıdır (user→kernel escalation ya da guest crash), bir host escape değil.

References