KVM AMD SVM LBR save/restore info leak (L2->L0)¶
KVM'in AMD Last Branch Record (LBR) MSR'larının save/restore'unu bir L2->L0 transition boyunca yanlış yönettiği nested-SVM state-management bug'ı (CVE-2026-46014); böylece stale L2 branch-record state'i sınırı aşıp hayatta kalır ve virtualization context'leri arasında control-flow bilgisi sızdırır.
Mechanism¶
Note
AMD'nin LBR özelliği, en son alınan branch'leri (jump, call, return) küçük bir
MSR bankasına (örn. DEBUGCTL/DbgCtl, LBR FROM/TO record'ları) kaydeder.
Bu MSR'lar per-logical-CPU global state'tir — CPU bunları bir
VMRUN/#VMEXIT boyunca otomatik olarak context-switch etmez. Dolayısıyla her
world switch'te giden context'in LBR state'ini kaydetmek ve gelen context'in
state'ini yüklemek hypervisor'ın sorumluluğundadır.
Nested SVM'de bir L2 guest'in exit'i doğrudan L0'a yönlendirilebilir
(L1'den geçmeden L0'ın handle ettiği bir #VMEXIT). O anda L0, L2 LBR MSR'larını
persist etmeli ve kendi (L0/L1) değerlerini restore etmelidir. CVE-2026-46014 bu
yoldaki bir logic error'dur: L2->L0 transition'ında LBR MSR'ları stale L2
değerleri tutar halde bırakılır (veya yanlış VMCB context'inden restore edilir
— vmcb01'e karşı vmcb02). Kırılan isolation invariant'ı CPU-state
confinement'tır: bir VM çalışırken üretilen branch-record state'i, başka bir
context'e world switch sonrasında gözlemlenebilir. Branch adresleri control-flow
bilgisidir, dolayısıyla bu, nested-virt sınırı boyunca bir
information-disclosure primitive'idir (örn. KASLR'ı yenmek, secret'a-bağımlı
control flow sızdırmak) ve bozulmuş DbgCtl/LBR-enable state'i host'u daha da
kararsızlaştırabilir.
Walkthrough¶
Bu, public ve patch'lenmiş CVE-2026-46014 açıklamasına dayanır; fix, KVM'in nested
SVM kodunda (arch/x86/kvm/svm/) yer alır. Kavramsal reproduction yolu:
- Nested SVM'nin enable olduğu (
kvm_amd.nested=1) bir AMD host üzerinde, kendisi bir L2 guest çalıştıran bir L1 hypervisor (KVM-in-KVM) çalıştır. - L2'de LBR'ı enable et (
DEBUGCTLiçindeki LBR-enable bit'ini set et). L2,FROM/TOrecord'ları LBR MSR'larına düşen bir branch akışı üretir. - KVM'in doğrudan servis ettiği bir L2->L0 exit'i zorla. Save/restore logic error'u nedeniyle KVM, gelen context için L2 LBR MSR'larını doğru şekilde persist/clear etmez.
- LBR MSR'larını okuyan bir sonraki context, artık kalan L2 branch record'larını — isolation sınırını aşmış control-flow state'ini — gözlemler.
Warning
LBR/DbgCtl'i CPU tarafından otomatik olarak izole edilmiş varsayma. Bunlar
sticky per-pCPU MSR'lardır; bir world switch'te kaçırılan herhangi bir
save/restore, cross-VM bir leak'tir. Bunu açıklayıcı kabul et — gerçek bir chain,
tam kernel version'a ve LBR virtualization (LBR_CTL) ayarlarına bağlıdır;
spesifikleri kavramsal tut.
Detection¶
- Host telemetry: hiç üretmediği non-zero LBR record'larını okuyabilen bir L2 ya da çalışan context ile tutarsız LBR/DbgCtl değerleri, bir leak'e işaret eder.
- Bir kernel'i denetleyen defender'lar için: nested-SVM world-switch yolunun, LBR
MSR'larını hem
vmcb01hemvmcb02context'leri için simetrik şekilde save/restore edip etmediğini kontrol et. - Patch'lenmiş kernel'ler fix'i içerir; çalışan kernel version'ı CVE-2026-46014 için vendor advisory'sine karşı doğrula.
Mitigation¶
- CVE-2026-46014'ü düzelten kernel güncellemesini uygula (her L2<->L0 transition'ında doğru LBR save/restore).
- Patch henüz mümkün değilse, AMD'de nested virtualization'ı disable et
(
kvm_amd.nested=0) ve/veya LBR'ı güvenilmeyen nested guest'lere expose etmekten kaçın. - Nested virtualization'ı güvenilen tenant'larla sınırla.
References¶
- "NVD - CVE-2026-46014." https://nvd.nist.gov/vuln/detail/CVE-2026-46014
- "CVE-2026-46014: KVM AMD SVM LBR Save/Restore Bug Threatens Nested Virtualization Security." https://windowsnews.ai/article/cve-2026-46014-kvm-amd-svm-lbr-saverestore-bug-threatens-nested-virtualization-security.420368