Door een kwetsbaarheid in KVM kan code worden uitgevoerd buiten het gastsysteem op AMD-processors

Onderzoekers van het Google Project Zero-team onthulden een paar dagen geleden in een blogpost dat: hebben een kwetsbaarheid (CVE-2021-29657) in de KVM-hypervisor geïdentificeerd (een open source op Linux gebaseerde hypervisor die hardware-versnelde virtualisatie ondersteunt op x86, ARM, PowerPC en S/390) die stelt u in staat om isolatie van het gastsysteem te voorkomen en voer uw code uit aan de kant van de hostomgeving.

Het bericht vermeldt dat het probleem manifesten van Linux-kernel 5.10-rc1 naar v5.12-rc6, dat is, dekt alleen kernels 5.10 en 5.11 (De meeste stabiele distributietakken werden niet door het probleem getroffen.) Het probleem is aanwezig in het nested_svm_vmrun-mechanisme, geïmplementeerd met behulp van de AMD SVM (Secure Virtual Machine)-extensie en waardoor geneste lancering van gastsystemen mogelijk is.

In deze blogpost beschrijf ik een kwetsbaarheid in de AMD-specifieke KVM-code en bespreek ik hoe deze bug kan uitgroeien tot een complete ontsnapping van een virtuele machine. Voor zover ik weet, is dit de eerste openbare beschrijving van een KVM-gast-naar-host-uitbraak die niet afhankelijk is van bugs in gebruikersruimtecomponenten zoals QEMU.

De besproken bug is toegewezen aan CVE-2021-29657, treft kernelversies v5.10-rc1 tot v5.12-rc6 en is eind maart 2021 gepatcht. Aangezien de bug pas in v5.10 kan worden misbruikt en ongeveer 5 maanden later werd ontdekt, zouden de meeste real-world KVM-implementaties niet moeten worden beïnvloed. Ik denk nog steeds dat het probleem een ​​interessante casestudy is in het werk dat nodig is om een ​​stabiele gast-naar-host-ontsnapping tegen KVM te bouwen en ik hoop dat dit artikel kan aantonen dat compromissen met hypervisors niet alleen theoretische problemen zijn.

De onderzoekers vermelden dat voor de juiste implementatie van deze functionaliteit, de hypervisor moet alle SVM-instructies onderscheppen draaien op gastsystemen, zijn gedrag nabootsen en de status synchroniseren met de hardware, wat een behoorlijk moeilijke opgave is.

Na analyse van de voorgestelde KVM-implementatie, hebben de onderzoekerss is een logische fout tegengekomen waardoor de inhoud van de MSR (modelspecifieke registratie) van de host beïnvloed worden vanuit het gastsysteem, die kan worden gebruikt om code op hostniveau uit te voeren.

Met name het uitvoeren van een VMRUN-bewerking vanaf een tweede gast op genest niveau (L2 gelanceerd vanaf een andere gast) leidt tot een tweede aanroep naar nested_svm_vmrun en corrumpeert de svm-> nested.hsave-structuur, die wordt bedekt met gegevens van vmcb van het L2-gastsysteem .

Als gevolg hiervan ontstaat een situatie waarin het op het L2-gastniveau mogelijk is om geheugen vrij te maken in de svm-> nested.msrpm-structuur, waarin de MSR-bit wordt opgeslagen, ook al wordt deze nog steeds gebruikt, en toegang te krijgen tot de MSR van de host omgeving. .

Dit betekent bijvoorbeeld dat het geheugen van een gast kan worden geïnspecteerd door het toegewezen geheugen van zijn gebruikersruimteproces te dumpen of dat resourcelimieten voor CPU-tijd en geheugen eenvoudig kunnen worden afgedwongen. 

Bovendien kan KVM het meeste werk met betrekking tot apparaatemulatie overdragen aan de gebruikersruimtecomponent.

Het probleem is aanwezig in de code die wordt gebruikt op systemen met AMD-processors (kvm-amd.ko-module) en verschijnt niet op Intel-processors.

 Afgezien van een aantal prestatiegevoelige apparaten die te maken hebben met het afhandelen van interrupts, kan alle complexe low-level code voor het leveren van virtuele schijf-, netwerk- of GPU-toegang in de gebruikersruimte worden geïmplementeerd.  

De onderzoekers beschrijven niet alleen het probleem ze hebben ook een werkend prototype van een exploit gemaakt waarmee een rootshell vanuit een gastomgeving in een hostomgeving kan worden uitgevoerd op een systeem met een AMD Epyc 7351P-processor en een Linux 5.10-kernel.

Opgemerkt wordt dat dit is de eerste gast die kwetsbaarheid host in de KVM-hypervisor zelf, niet gerelateerd aan bugs in gebruikersruimtecomponenten zoals QEMU. De fix werd eind maart in de kernel geaccepteerd.

Eindelijk als u er meer over wilt weten over de notitie kunt u de details bekijken In de volgende link.


Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.