Badacze z zespołu Google Project Zero zidentyfikowali lukę (CVE-2021-29657) w hipernadzorze KVM dostarczanym w jądrze Linux, która umożliwia obejście izolacji systemu gościa i wykonanie własnego kodu w środowisku hosta. Problem występuje w kodzie używanym w systemach z procesorami AMD (moduł kvm-amd.ko) i nie występuje na procesorach Intel.
Badacze opracowali działający prototyp exploita, który umożliwia z systemu gościa uruchomienie shell'a z uprawnieniami root w środowisku hosta na systemie z procesorem AMD Epyc 7351P i jądrem Linux 5.10. Zauważono, że jest to pierwsza luka klasy «guest-to-host» w samym hipernadzorze. KVM, niezwiązana z błędami w komponentach działających w przestrzeni użytkownika, takich jak QEMU. Poprawka została wprowadzona do jądra pod koniec marca. Problem występuje od jądra Linux 5.10-rc1 do v5.12-rc6, co oznacza, że dotyczy tylko jąder 5.10 oraz 5.11 (większość stabilnych gałęzi dystrybucji nie dotknęła tego problemu).
Problem występuje w mechanizmie nested_svm_vmrun, zrealizowanym przy użyciu rozszerzenia AMD SVM (Secure Virtual Machine), który umożliwia zagnieżdżone uruchamianie systemów gości. Aby prawidłowo wdrożyć tę funkcjonalność, hipernadzorca musi przechwytywać wszystkie instrukcje SVM wykonywane w systemach gości, emulować ich zachowanie i synchronizować stan z sprzętem, co jest dość złożonym zadaniem. Analizując realizację w KVM, badacze znaleźli błąd logiczny, który pozwala na wpływanie na zawartość rejestrów MSR (Model-Specific Register) hosta z systemu gościa, co może być wykorzystane do uruchamiania kodu na poziomie hosta.
W szczególności wykonanie operacji VMRUN z systemu gościa drugiego poziomu zagnieżdżenia (L2, uruchamianego z innego systemu gościa) prowadzi do drugiego wywołania nested_svm_vmrun i uszkodzenia struktury svm->nested.hsave, na którą nakładane są dane z vmcb systemu gościa L2. W rezultacie pojawia się sytuacja, w której na poziomie systemu gościa L2 można zwolnić pamięć w strukturze svm->nested.msrpm, w której przechowywany jest bit MSR, pomimo że nadal jest używany, i uzyskać dostęp do MSR środowiska hosta.
Źródło: opennet.ru
