O vulnerabilitate în codul specific CPU AMD KVM, care permite executarea de cod în afara sistemului oaspete.

Cercetătorii din echipa Google Project Zero au identificat o vulnerabilitate (CVE-2021-29657) în hipervizorul KVM furnizat cu nucleul Linux, care permite ocolirea izolării sistemului gazdă și executarea codului propriu în mediul de găzduire. Problema este prezentă în codul utilizat pe sistemele cu procesoare AMD (modulul kvm-amd.ko) și nu se manifestă pentru procesoarele Intel.

Cercetătorii au dezvoltat un prototip funcțional al unui exploit care permite lansarea unui shell root în mediu de găzduire de pe un mediu gazdă pe un sistem cu procesor AMD Epyc 7351P și nucleu Linux 5.10. Se observă că aceasta este prima breșă de tip „guest-to-host” în hipervizor în sine. KVM, care nu este legată de erori în componentele rulante în spațiul utilizatorului, precum QEMU. Corectarea a fost acceptată în nucleu la sfârșitul lunii martie. Problema apare începând cu nucleul Linux 5.10-rc1 și se încheie cu v5.12-rc6, adică acoperă doar nucleele 5.10 și 5.11 (majoritatea ramurilor stabile ale distribuțiilor nu sunt afectate de această problemă).

Problema este prezentă în mecanismul nested_svm_vmrun, implementat folosind extensia AMD SVM (Secure Virtual Machine) și care permite organizarea lansării în cuib a sistemelor gazdă. Pentru a realiza corect această funcționalitate, hipervizorul trebuie să intercepteze toate instrucțiunile SVM executate în sistemele gazdă, să le emuleze comportamentul și să sincronizeze starea cu hardware-ul, ceea ce este o sarcină destul de complexă. Analizând implementarea propusă în KVM, cercetătorii au descoperit o eroare logică care permite influențarea conținutului registrilor MSR (Model-Specific Register) ai gazdei din sistemul gazdă, ceea ce poate fi folosit pentru a lansa cod la nivel de gazdă.

În particular, executarea operațiunii VMRUN dintr-un sistem gazdă de nivelul doi (L2, lansat dintr-un alt sistem gazdă) duce la un apel secundar al nested_svm_vmrun și la deteriorarea structurii svm->nested.hsave, peste care sunt suprapuse datele din vmcb-ul sistemului gazdă L2. Ca urmare, apare o situație în care, la nivelul sistemului gazdă L2, se poate elibera memoria din structura svm->nested.msrpm, în care este stocat bitul MSR, deși acesta continuă să fie utilizat, și se obtine acces la MSR-ul mediului gazdă.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster