Уязвимост в специфичен за CPU AMD код на KVM, позволяваща изпълнение на код извън гост-системата

Изследователи от Google Project Zero откриха уязвимост (CVE-2021-29657) в хипервизора KVM, включен в ядрото на Linux, която позволява заобикаляне на изолацията на гост-системата и изпълнение на код на страната на хост-околната среда. Проблемът съществува в кода, използван на системи с AMD процесори (модул kvm-amd.ko) и не се проявява за Intel процесори.

Изследователите разработиха работен прототип на експлоит, който позволява от гост-околната среда да стартира root shell в хост-околната среда на система с процесор AMD Epyc 7351P и Linux ядро 5.10. Отбелязва се, че това е първата уязвимост от клас «guest-to-host» в самия хипервизор KVM, несвързана с грешки в компонентите, работаещи в потребителското пространство, като QEMU. Поправка беше включена в ядрото в края на март. Проблемът се проявява от ядрото на Linux 5.10-rc1 до v5.12-rc6, т.е. обхваща само ядрото 5.10 и 5.11 (повечето стабилни версии на дистрибуциите не са засегнати от проблема).

Проблемът съществува в механизма nested_svm_vmrun, реализиран с помощта на AMD SVM (Secure Virtual Machine) разширение, което позволява организирането на вложено стартиране на гост-системи. За коректна реализация на тази функционалност, хипервизорът трябва да прихваща всички инструкции SVM, изпълнявани в гост-системите, да емулира тяхното поведение и да синхронизира състоянието с хардуера, което представлява достатъчно сложна задача. Анализирайки предложената в KVM реализация, изследователите откриха логическа грешка, позволяваща въздействие върху съдържанието на MSR-регистрите (Model-Specific Register) на хоста от гост-системата, което може да се използва за изпълнение на код на ниво хост.

В частност, изпълнението на операцията VMRUN от вторично ниво гост-система (L2, стартирана от друга гост-система) води до второ повикване на nested_svm_vmrun и повреда на структурата svm->nested.hsave, върху която се налагат данни от vmcb на гост-система L2. В резултат на това възниква ситуация, при която на ниво гост-система L2 може да се освободят памет в структурата svm->nested.msrpm, в която се съхранява бит MSR, въпреки че той все още се използва, и да се получи достъп до MSR на хост-околната среда.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster