Kopeerimise ebaõnnestumine: Linuxi haavatavus, mis annab juurjuurdepääsu lehe vahemällu salvestamise kaudu

Võtmepunktid:
  • Ründaja avab AF_ALG sokli ja küsib autentimisalgoritmi.
  • Ründaja kasutab splice() funktsiooni, et varustada soklit sihtfaili vahemälust pärit lehtedega (nt /usr/bin/su). Need lehed saavad seejärel väljundräsiloendi osaks (kirjutatavad).
  • Ründaja saadab pahatahtlikult loodud seotud autentitud andmetega (AAD) sõnumi (sendmsg), kus baidid 4–7 sisaldavad andmeid, mida nad soovivad kirjutada (nt pahatahtlik kood).
  • Dekrüpteerimise käivitamisel võtab authencesn need 4 baiti AAD-st ja kirjutab need ajutiselt puhvri lõppu. Kohapealse optimeerimise tõttu osutab puhvri see ots otse faili vahemälu lehele.
  • Krüptograafiline toiming ebaõnnestub (šifrtekst on vigane), kuid 4-baidine kirjutamine on juba toimunud ja seda ei pöörata enam tagasi.
  • Ründaja kordab protsessi, et oma koodi sisestada. Kui /usr/bin/su käivitatakse, laadib kernel muudetud versiooni mälust ja käivitab sisestatud koodi root-õigustega.

kopeerimine ebaõnnestus

Linuxi turvalisus seisab silmitsi uue väljakutsega pärast haavatavuse CVE-2026-31431 avastamist , millele Xint Code'i teadlased on andnud nimeks "kopeerimise ebaõnnestumine". See disainiprobleem pole kaugeltki teoreetiline viga, vaid võimaldab privileegideta kohalikul kasutajal oma õigusi laiendada ja saada täieliku superkasutaja juurdepääsu etteaimatavalt ja vaikselt.

Teadlased mainivad, et seda viga on edukalt ära kasutatud juhtivates distributsioonides nagu Ubuntu, Amazon Linux, RHEL ja SUSE, mis kinnitab, et iga süsteem, mis töötab kerneliga, mis on uuem kui versioon 4.14 ja millel on AF_ALG sokli tugi lubatud, on selle rünnaku suhtes potentsiaalselt haavatav .

Kohapealsed toimingud ja lehe vahemälu ületäitumine

Haavatavuse kohta mainitakse, et see pärineb 2017. aastal kerneli krüptograafilise API (AF_ALG) sees kasutusele võetud optimeerimisest. Selle muudatuse eesmärk oli kõrvaldada ebavajalik puhverdamine, teostades autentitud krüpteerimistoiminguid (AEAD) otse samas mäluruumis, mida tuntakse kohapealsete toimingutena.

Kriitiline probleem tekib selle optimeerimise kombineerimisel splice() funktsiooniga, mis edastab andmeid failideskriptorite vahel, edastades otseseid viiteid kerneli lehe vahemällu, selle asemel et andmeid füüsiliselt kopeerida. Dekrüpteerimise taotlemisel konfigureeriti mälustruktuur nii, et sihtkoha puhver, mis peaks olema kasutaja ajutine ruum, oli lõpuks otse lingitud vahemälu lehtedega, mis sisaldasid süsteemifailide andmeid.

Autentimine ja kirjutamine väljaspool mälu piire

Haavatavuse peamine käivitaja peitub autentimisalgoritmi anomaalses käitumises. Erinevalt teistest krüptograafilistest rutiinidest, mis rangelt austavad oma sihtpuhvrite piire, kasutab see konkreetne algoritm kasutajamälu ajutise tööruumina (märkmepaanina), et autentimissiltide arvutamise ajal baitide järjestusi ümber korraldada.

Selle protsessi käigus kirjutab algoritm väljundpiirkonna jaoks neli baiti kehtestatud piirist kaugemale. Tänu kohapealsele optimeerimisele ja splice() loodud viiteahelale ületab see pealtnäha kahjutu kirjutustoiming kasutaja mälu piiri ja maandub otse töödeldava failiga seotud kerneli vahemälu lehele.

See loogikavigade ahel annab ründajale võimaluse kirjutada suvaliselt üle neli baiti lehe vahemälu kindlates positsioonides mis tahes faili puhul, mida nad saavad lugeda. Arvutatud päringute seeria saatmisega saab ründaja süstida pahatahtlikku koodi kriitiliste käivitatavate failide mälusisesesse versiooni, mille suid-bitt on määratud, näiteks kasutaja vahetaja tööriista abil.

Kuna kõik lugemisoperatsioonid pärivad esmalt lehe vahemälu, siis järgmisel korral, kui legitiimne utiliit käivitatakse, käivitab süsteem sisestatud koodi mälust, andes koheselt juurõigused ilma kõvakettal olevat füüsilist faili muutmata. Veelgi murettekitavam on see, et kuna konteineri isolatsioon jagab alusmasina lehe vahemälu, toimib see haavatavus otsese väravana virtualiseeritud keskkondadest, nagu Kubernetes klastrid, pääsemiseks ja primaarsõlme ohtu seadmiseks.

Hädaolukorra parandused ja leevenduslahendused

Arvestades selle vea tõsidust, on hooldusmeeskonnad välja andnud erakorralised värskendused, mille lõplik lahendus seisneb algif_aead.c failis oleva kohapealse optimeerimise tagasipööramises, eraldades rangelt lähte- ja sihtmälu loendid, et vältida vahemälu lehtede sattumist kirjutatavatesse radadesse.

Need parandused on juba integreeritud kernelitesse 6.18.22, 6.19.12 ja 7.0 ning need porditakse tagasi pikaajalise toe harudesse. Administraatoritel, kes ei saa oma servereid kohe taaskäivitada ega värskendada, on soovitatav keelata algif_aead kerneli moodul, kui see kompileeriti väliselt, või piirata oluliselt AF_ALG soklite loomist turvapoliitikate, näiteks SELinuxi abil, mis on kilp, mis on näiteks praeguseid Androidi seadmeid selle ohu eest kaitsnud.

Lõpuks, kui olete huvitatud lisateabest, leiate üksikasjad järgmiselt lingilt.


Lisa eelistatud allikana Google'is