Kwetsbaarheid in de Linux-kernel waardoor alleen-lezen bestanden kunnen worden beschadigd

Er is een kwetsbaarheid geïdentificeerd in de Linux-kernel (CVE-2022-0847) waardoor de inhoud van de paginacache kan worden overschreven voor alle bestanden, inclusief bestanden in de alleen-lezen-modus, geopend met de vlag O_RDONLY of die zich op bestandssystemen bevinden gemonteerd in alleen-lezen modus. In de praktijk zou de kwetsbaarheid kunnen worden gebruikt om code in willekeurige processen te injecteren of gegevens in geopende bestanden te corrumperen. U kunt bijvoorbeeld de inhoud van het bestand geautoriseerde_sleutels voor het sshd-proces wijzigen. Er is een exploit-prototype beschikbaar om te testen.

Het probleem heeft de codenaam Dirty Pipe gekregen, vergelijkbaar met de kritieke kwetsbaarheid die Dirty COW in 2016 ontdekte. Opgemerkt wordt dat Dirty Pipe qua gevaarniveau op hetzelfde niveau zit als Dirty COW, maar veel gemakkelijker te bedienen is. De kwetsbaarheid werd geïdentificeerd tijdens de analyse van klachten over periodieke corruptie van bestanden die via het netwerk zijn gedownload in een systeem dat gecomprimeerde archieven downloadt van een logserver (37 corrupties in 3 maanden op een geladen systeem), waarvan de voorbereiding gebruik maakte van de splice()-bewerking en naamloze pijpen.

De kwetsbaarheid doet zich voor vanaf de Linux-kernel 5.8, uitgebracht in augustus 2020, d.w.z. aanwezig in Debian 11, maar heeft geen invloed op de basiskernel in Ubuntu 20.04 LTS. De RHEL 8.x en openSUSE/SUSE 15 kernels zijn aanvankelijk gebaseerd op oude branches, maar het is mogelijk dat de verandering die het probleem veroorzaakte, daarin teruggeporteerd werd (er zijn nog geen exacte gegevens). U kunt de publicatie van pakketupdates in distributies volgen op deze pagina's: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux. Er is een oplossing voor het beveiligingslek gevonden in releases 5.16.11, 5.15.25 en 5.10.102. De fix is ​​ook opgenomen in de kernel die op het Android-platform wordt gebruikt.

De kwetsbaarheid wordt veroorzaakt door het ontbreken van initialisatie van de waarde “buf->flags” in de code van de functies copy_page_to_iter_pipe() en push_pipe(), ondanks het feit dat het geheugen niet wordt gewist bij het toewijzen van een structuur en tijdens bepaalde manipulaties met naamloze pijpen, een waarde uit een andere bewerking. Met deze functie kan een lokale gebruiker zonder bevoegdheden ervoor zorgen dat de waarde PIPE_BUF_FLAG_CAN_MERGE in de vlag verschijnt, waardoor u het overschrijven van gegevens in de paginacache kunt organiseren door eenvoudigweg nieuwe gegevens naar een speciaal voorbereide naamloze pipe te schrijven.

Voor een aanval moet het doelbestand leesbaar zijn, en aangezien de toegangsrechten niet worden gecontroleerd bij het schrijven naar pipe, kan vervanging in de paginacache ook worden gemaakt voor bestanden die zich bevinden in partities die alleen-lezen zijn aangekoppeld (bijvoorbeeld voor bestanden c CD- ROM). Nadat de informatie in de paginacache is vervangen, ontvangt het proces bij het lezen van gegevens uit een bestand niet de daadwerkelijke gegevens, maar de vervangen gegevens.

De werking komt neer op het creëren van een naamloos kanaal en het vullen ervan met willekeurige gegevens om ervoor te zorgen dat de vlag PIPE_BUF_FLAG_CAN_MERGE wordt ingesteld in alle daarmee verbonden ringstructuren. Vervolgens worden de gegevens uit het kanaal gelezen, maar de vlag blijft ingesteld in alle instanties van de pipe_buffer-structuur in de pipe_inode_info-ringstructuren. Vervolgens wordt splice() aangeroepen om gegevens uit het doelbestand in een naamloze pipe te lezen, beginnend bij de gewenste offset. Bij het schrijven van gegevens naar deze naamloze pipe worden, omdat de vlag PIPE_BUF_FLAG_CAN_MERGE is ingesteld, de gegevens in de paginacache overschreven in plaats van dat er een nieuw exemplaar van de pipe_buffer-structuur wordt gemaakt.

Bron: opennet.ru

Voeg een reactie