Dirty Frag-kwetsbaarheden die de paginacache manipuleren om roottoegang te verkrijgen in alle Linux-distributies.

Er zijn twee kwetsbaarheden ontdekt in de Linux-kernel. Deze kwetsbaarheden lijken op de Copy Fail-kwetsbaarheid die enkele dagen geleden aan het licht kwam, maar ze treffen andere subsystemen: xfrm-ESP en RxRPC. Deze reeks kwetsbaarheden heeft de codenaam Dirty Frag (ook wel Copy Fail 2 genoemd). Deze kwetsbaarheden stellen een gebruiker zonder rootrechten in staat om rootrechten te verkrijgen door procesgegevens in de paginacache te overschrijven. Er is een exploit beschikbaar die werkt op alle huidige Linux-distributies. De kwetsbaarheid werd openbaar gemaakt voordat er patches werden uitgebracht, maar er is een workaround beschikbaar.

Dirty Frag behandelt twee verschillende kwetsbaarheden: de eerste in de xfrm-ESP-module, die wordt gebruikt om IPsec-versleutelingsbewerkingen te versnellen met behulp van het ESP-protocol (Encapsulating Security Payload), en de tweede in de RxRPC-driver, die de AF_RXRPC-socketfamilie en het gelijknamige RPC-protocol implementeert en via UDP draait. Elke kwetsbaarheid, afzonderlijk beschouwd, maakt root-toegang mogelijk. De xfrm-ESP-kwetsbaarheid is sinds januari 2017 aanwezig in de Linux-kernel en de RxRPC-kwetsbaarheid sinds juni 2023. Beide problemen worden veroorzaakt door optimalisaties die directe schrijfbewerkingen naar de paginacache mogelijk maken.

Om de xfrm-ESP-kwetsbaarheid te misbruiken, moet de gebruiker toestemming hebben om namespaces aan te maken. Om de RxRPC-kwetsbaarheid te misbruiken, moet de kernelmodule rxrpc.ko geladen zijn. In Ubuntu bijvoorbeeld voorkomen AppArmor-regels dat gebruikers zonder beheerdersrechten namespaces aanmaken, maar de rxrpc.ko-module is standaard geladen. Sommige distributies missen de rxrpc.ko-module, maar blokkeren het aanmaken van namespaces niet. De onderzoeker die het probleem ontdekte, ontwikkelde een gecombineerde exploit waarmee het systeem via beide kwetsbaarheden kan worden aangevallen, waardoor het mogelijk is om het probleem op alle belangrijke distributies te misbruiken. Het is bevestigd dat de exploit werkt op Ubuntu 24.04.4 met kernel 6.17.0-23, RHEL 10.1 met kernel 6.12.0-124.49.1, openSUSE Tumbleweed met kernel 7.0.2-1, CentOS Stream 10 met kernel 6.12.0-224, AlmaLinux 10 met kernel 6.12.0-124.52.3 en Fedora 44 met kernel 6.19.14-300.

Net als bij de Copy Fail-kwetsbaarheid worden de problemen in xfrm-ESP en RxRPC veroorzaakt door in-place data-decryptie met behulp van de splice()-functie. Deze functie draagt ​​data over tussen bestandsdescriptors en pipes zonder te kopiëren, door verwijzingen naar elementen in de paginacache door te geven. Schrijfoffsets werden berekend zonder de juiste controles om rekening te houden met het gebruik van directe verwijzingen naar elementen in de paginacache. Hierdoor konden speciaal geconstrueerde verzoeken 4 bytes op een bepaalde offset overschrijven en de inhoud van elk bestand in de paginacache wijzigen.

Alle bestandsleesbewerkingen halen eerst de inhoud uit de paginacache. Als gegevens in de paginacache worden gewijzigd, retourneren bestandsleesbewerkingen vervangen gegevens, niet de daadwerkelijke informatie die op de schijf is opgeslagen. Het misbruiken van de kwetsbaarheid komt neer op het wijzigen van de paginacache voor een uitvoerbaar bestand met de suid-rootvlag. Om bijvoorbeeld rootrechten te verkrijgen, zou men het uitvoerbare bestand /usr/bin/su kunnen lezen en in de paginacache plaatsen, en vervolgens eigen code in de inhoud van dit bestand in de paginacache kunnen vervangen. Bij een daaropvolgende uitvoering van het hulpprogramma "su" wordt de gewijzigde kopie uit de paginacache in het geheugen geladen, niet het oorspronkelijke uitvoerbare bestand van de schijf.

De openbaarmaking van de kwetsbaarheid en de gecoördineerde release van patches stond gepland voor 12 mei, maar door een lek moest de informatie over de kwetsbaarheid eerder worden gepubliceerd dan de patches. Eind april werden patches voor rxrpc, ipsec en xfrm naar de openbare mailinglijst van netdev gestuurd zonder te vermelden dat ze verband hielden met de kwetsbaarheid. Op 5 mei accepteerde de beheerder van het IPsec-subsysteem een ​​wijziging in de netdev Git-repository met een voorgestelde oplossing in de xfrm-esp-module. De beschrijving van de wijziging was grotendeels identiek aan de beschrijving van het probleem dat leidde tot de Copy Fail-kwetsbaarheid in de algif_aead-module. Een beveiligingsonderzoeker raakte geïnteresseerd in deze oplossing, slaagde erin een werkende exploit te maken en publiceerde deze, zich er niet van bewust dat er een embargo gold op het openbaar maken van informatie over het probleem tot 12 mei.

Updates met oplossingen voor de Linux-kernel en kernelpakketten in distributies zijn nog niet gepubliceerd, maar patches die de problemen verhelpen zijn wel beschikbaar: xfrm-esp en rxrpc. Er zijn geen CVE-identificaties toegekend, wat het lastig maakt om pakketupdates in distributies te volgen. Als tijdelijke oplossing kunt u het laden van de kernelmodules esp4, esp6 en rxrpc blokkeren: sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf; rmmod esp4 esp6 rxrpc 2>/dev/null; true"

Bron: opennet.ru