Výzkumníci z týmu Google Project Zero odhalili zranitelnost (CVE-2021-29657) v dodávaném hypervizoru KVM v jádře Linux, která umožňuje obejít izolaci hostitelského systému a spustit svůj kód na straně hostitelského prostředí. Problém se vyskytuje v kódu používaném na systémech s procesory AMD (modul kvm-amd.ko) a neprojevuje se na procesorech Intel.
Výzkumníci připravili provozní prototyp exploit, který umožňuje ze sousedního prostředí spustit shell s oprávněním root na hostitelském prostředí systému s procesorem AMD Epyc 7351P a jádrem Linux 5.10. Je zaznamenáno, že se jedná o první zranitelnost třídy „guest-to-host“ v samotném hypervizoru. KVM, nesouvisející s chybami v komponentách běžících v uživatelském prostoru, jako je QEMU. Oprava byla přijata do jádra na konci března. Problém se projevuje od jádra Linux 5.10-rc1 do v5.12-rc6, tedy pokrývá pouze jádra 5.10 a 5.11 (většina stabilních větví distribucí se tohoto problému nedotkla).
Problém se vyskytuje v mechanismu nested_svm_vmrun, implementovaném pomocí rozšíření AMD SVM (Secure Virtual Machine), které umožňuje uspořádat vnořený spuštění hostitelských systémů. Pro správnou implementaci této funkcionality musí hypervizor zachytávat všechny instrukce SVM vykonávané v hostitelských systémech, emulovat jejich chování a synchronizovat stav s hardwarem, což je poměrně složitý úkol. Po analýze implementace v KVM výzkumníci našli logickou chybu, která umožňuje ovlivnit obsah registrů MSR (Model-Specific Register) hostitele z hostitelského systému, což lze využít k spuštění kódu na úrovni hostitele.
Konkrétně provedení operace VMRUN z druhého úrovňového hostitelského systému (L2, spuštěného z jiného hostitelského systému) vede k druhému volání nested_svm_vmrun a poškození struktury svm->nested.hsave, do které jsou ukládána data z vmcb hostitelského systému L2. Výsledkem je situace, kdy na úrovni hostitelského systému L2 lze uvolnit paměť ve struktuře svm->nested.msrpm, ve které je uložen bit MSR, ačkoli je nadále používán, a získat přístup k MSR hostitelského prostředí.
Zdroj: opennet.ru
