A Google Project Zero csapatának kutatói egy sebezőséget (CVE-2021-29657) fedeztek fel a Linux kernelben található KVM hypervisorban, amely lehetővé teszi a vendégrendszer izolációjának megkerülését és saját kód végrehajtását a host környezet oldalán. A probléma az AMD processzorokkal (kvm-amd.ko modul) használt kód részében található, és nem jelentkezik Intel processzorok esetén.
A kutatók egy működő exploit prototípust készítettek, amely lehetővé teszi, hogy a vendégrendszerből root shell-t indítsanak a host környezetben egy AMD Epyc 7351P processzorral rendelkező rendszeren és Linux 5.10 kernel alatt. Megjegyzik, hogy ez az első 'guest-to-host' osztályú rés a hypervisorban, KVM, amely nem kapcsolódik felhasználói térben végrehajtott komponensek, például QEMU hibáihoz. A javítást március végén fogadták el a kernelbe. A probléma a Linux 5.10-rc1 kerneltől kezdve egészen a v5.12-rc6-ig jelentkezik, tehát csak a 5.10 és 5.11 kernelt érinti (a probléma a legtöbb stabil disztribúciót nem érintette).
A probléma a nested_svm_vmrun mechanizmusban található, amely az AMD SVM (Secure Virtual Machine) kiterjesztést használja a vendégrendszerek beágyazott futtatásának lehetővé tételére. A hypervisornak, ahhoz, hogy ezt a funkciót helyesen valósíthassa meg, le kell állítania az összes SVM utasítást, amelyet a vendégrendszerekben hajtanak végre, emulálnia kell a viselkedésüket és szinkronizálnia kell az állapotot a hardverrel, ami meglehetősen bonyolult feladat. A kutatók elemezve a KVM megvalósítást logikai hibát találtak, amely lehetővé teszi a host MSR regiszterének (Model-Specific Register) tartalmának befolyásolását a vendégrendszerből, amit fel lehet használni a host szintű kód végrehajtására.
Különösen a második szintű vendégrendszerből (L2, amelyet egy másik vendégrendszerből indítottak) végrehajtott VMRUN művelet második calls-hoz vezet a nested_svm_vmrun-ban, és megzavarja az svm->nested.hsave struktúra tartalmát, amelyre a L2 vendégrendszer vmcb-adatainak adatai rakódnak rá. Ennek következtében olyan helyzet áll elő, amikor a L2 vendégrendszer szintjén lehetővé válik, hogy felszabadítsák a memóriát az svm->nested.msrpm struktúrában, amelyben a MSR bit tárolódik, noha az továbbra is használatban van, és hozzáférést nyernek a host MSR-hez.
Forrás: opennet.ru
