Forscher des Google Project Zero-Teams haben eine Schwachstelle (CVE-2021-29657) im KVM-Hypervisor, der im Linux-Kernel enthalten ist, entdeckt, die es ermöglicht, die Isolierung des Gastsystems zu umgehen und eigenen Code im Host-Umfeld auszufĂŒhren. Das Problem tritt im Code auf, der auf Systemen mit AMD-Prozessoren (Modul kvm-amd.ko) verwendet wird, und zeigt sich nicht bei Intel-Prozessoren.
Die Forscher haben einen funktionierenden Exploit-Prototyp erstellt, der es ermöglicht, aus der Gastumgebung heraus eine Root-Shell im Host-Umfeld auf einem System mit AMD Epyc 7351P-Prozessor und Linux-Kernel 5.10 zu starten. Es wird darauf hingewiesen, dass dies die erste Schwachstelle der Klasse âguest-to-hostâ im Hypervisor selbst ist, KVM, die nicht mit Fehlern in Komponenten verbunden ist, die im Benutzermodus laufen, wie z.B. QEMU. Das Patch wurde Ende MĂ€rz in den Kernel aufgenommen. Das Problem tritt erstmals seit Kernel 5.10-rc1 auf und betrifft bis v5.12-rc6, also nur die Kernelversionen 5.10 und 5.11 (die meisten stabilen Verzweigungen der Distributionen sind nicht betroffen).
Das Problem betrifft den Mechanismus nested_svm_vmrun, der mit der AMD SVM (Secure Virtual Machine) Erweiterung realisiert ist und die Möglichkeit bietet, Gastbetriebssysteme verschachtelt zu starten. FĂŒr eine korrekte Umsetzung dieser FunktionalitĂ€t muss der Hypervisor alle SVM-Anweisungen, die in den Gastbetriebssystemen ausgefĂŒhrt werden, abfangen, ihr Verhalten emulieren und den Zustand mit der Hardware synchronisieren, was eine komplexe Aufgabe darstellt. Bei der Analyse der KVM-Implementierung fanden die Forscher einen logischen Fehler, der es ermöglicht, den Inhalt der MSR-Register (Model-Specific Register) des Hosts aus dem Gastbetriebssystem zu beeinflussen, was fĂŒr die AusfĂŒhrung von Code auf Host-Ebene verwendet werden kann.
Insbesondere fĂŒhrt die AusfĂŒhrung der VMRUN-Operation aus einem zweiten Level-Guest-System (L2, das aus einem anderen Gastbetriebssystem gestartet wurde) zu einem zweiten Aufruf von nested_svm_vmrun und beschĂ€digt die Struktur svm-nested.hsave, in die Daten aus dem vmcb des L2-Gastbetriebssystems eingefĂŒgt werden. Dadurch entsteht eine Situation, in der im L2-Gastbetriebssystem Speicher in der Struktur svm-nested.msrpm freigegeben werden kann, in der das MSR-Bit gespeichert ist, obwohl es weiterhin verwendet wird, wodurch auf das MSR der Hostumgebung zugegriffen werden kann.
Quelle: opennet.ru
