Ettevõtte Xint teadlased avastasid Linuxi südamikus haavatavuse (CVE-2026-31431), mis võimaldab privileegideta kasutajal saada root-juurdepääs süsteemile. Probleemile on antud koodnimi Copy Fail. Ekspluateerimise prototüüp on kergesti kättesaadav. Haavatavuse ekspluateerimise võimalust on demonstreeritud Ubuntu 24.04 LTS, Amazon Linux 2023, RHEL 10.1 ja SUSE 16, kuid märgitakse, et ka teiste jaotuste südamikupaketid, sealhulgas Debian, Arch, Fedora, Rocky ja Alma, on probleemile vastuvõtlikud, kuigi neid pole eraldi testitud.
Haavatavus tuleneb loogilisest veast Linuxi tuuma crypto API-s (AF_ALG), mis tekkis 2017. aastal tehtud optimeerimise tõttu, mille käigus eemaldati liigne puhverdus teostades otse (in-place) bloki krüpteerimise AEAD (Authenticated Encryption with Associated Data) operatsioone. Probleem tekkis ettevaatamatu splice() funktsiooni kasutamise tõttu, mis edastab andmeid failides olevate kirjeldajate ja kanalite (pipe) vahel ilma kopeerimiseta, edastades viiteid elementidele lehtede vahemälus. Pärast optimeerimist failide edastamisel AF_ALG soketisse dekrüpteerimiseks kirjutati scatterlist struktuuri mitte viit eraldi puhvrile, vaid otsene viide tuuma lehtede vahemälu elementidele koos faili andmetega.
Edasi liikumisel AEAD dekrüpteerimise protsessis segunesid viidatud autentimise sildiga ("authentication tag") andmed RX-puhvrisse kopeeritavate täiendavate autentitavate andmetega (AAD, Associated Authenticated Data) ja šifrantiga, ning autentimise sildile kirjutamise nihke arvutamine toimus kopeeritud andmete suhtes alusetute kontrollidega, mis võimaldas üle kirjutada suvalisi alasid lehe vahemälu.
Rikkumine võimaldab iga päringu korral kirjutada 4 baiti valitud offset'is, mis võimaldab ründajal saadetud päringute seeria kaudu muuta vahemälus mis tahes faili sisu, mis on süsteemis lugemiseks saadaval, enne kui see vahemälu pannakse. Kuna failidest lugemise ajal antakse sisu esmalt vahemälust, siis pärast teabe asendamist vahemälus saab tuum või protsess andmeid lugedes mitte tegelikke, vaid asendatud andmeid, mida saab kasutada koodi paigutamiseks käivitatavatesse faili failidesse või jagatud teekidesse.
Koodi käivitamiseks root'i õigustes piisab vahemälu muutmisest mis tahes täidetava faili puhul, millel on suid root-i lipp.
Pakutud ekspluateerimises loetakse täidetavat faili /usr/bin/su ja muudetakse sellesse faili laaditud sisu vahemälus, et sisestada sinna oma kood. Järgneva 'su' utiliidi käivitamise korral laaditakse mällu mitte originaalne täidetav fail mälust, vaid muudetud koopia vahemälust.
Exploiti on universaalne, ei nõua kohandamist distributsioonide või tuuma versioonide jaoks ning seda saab kasutada kõigi distributsioonide puhul. Kuna konteinerite jaoks kasutatakse konteinerite isolatsiooni kaudu ühiseid lehekülje vahemälusid, saab haavatavust kasutada host-keskkonda konteinerist juurdepääsu saamiseks (hiljem lubatakse avaldada exploiti, et vältida isolatsiooni Kuberneteses).
Haavatavus tuvastati AI abil umbes tunni katsetuste järel tuumakryptosüsteemi koodi analüüsimisel. Probleem ilmneb alates Linuxi tuumast 4.14, mis ilmus 2017. aastal, ja see on lahendatud tuumades 6.18.22, 6.19.12 ja 7.0. Haavatavuste lahendamise staatus distributsioonides on hinnatav järgmistes lehtedes: Debian, Ubuntu, SUSE/openSUSE, RHEL, Gentoo, Arch,
Fedora, ROSA.
Kaitse tõrkeühendusena võib keelata tuumamooduli algif_aead, mida kasutatakse OpenSSL-is afalg mootorite eksplicitse aktiveerimise korral ja eraldi rakendustes (taoliste käivitatud rakenduste olemasolu saab kontrollida käsuga «lsof | grep AF_ALG»):
echo «install algif_aead /bin/false» > /etc/modprobe.d/disable-algif.conf
rmmod algif_aead
Allikas: opennet.ru
