Kopēšanas kļūme: Linux ievainojamība, kas piešķir root piekļuvi, izmantojot lapas kešatmiņu

Galvenie punkti:
  • Uzbrucējs atver AF_ALG ligzdu un pieprasa autentifikācijas algoritmu.
  • Uzbrucējs izmanto splice(), lai ievadītu ligzdā lapas no mērķa faila kešatmiņas (piemēram, /usr/bin/su). Šīs lapas pēc tam kļūst par daļu no izvades jaucējkoku saraksta (rakstāmas).
  • Uzbrucējs nosūta ziņojumu (sendmsg) ar ļaunprātīgi izstrādātiem saistītajiem autentificētajiem datiem (AAD), kur 4.–7. baiti satur datus, ko vēlas rakstīt (piemēram, ļaunprātīgu kodu).
  • Kad tiek aktivizēta atšifrēšana, authencesn paņem šos 4 baitus no AAD un īslaicīgi ieraksta tos bufera beigās. Pateicoties optimizācijai uz vietas, šis bufera gals norāda tieši uz failu kešatmiņas lapu.
  • Kriptogrāfiskā operācija neizdodas (šifrteksts nav derīgs), bet 4 baitu rakstīšana jau ir notikusi un nekad netiek atsaukta.
  • Uzbrucējs atkārto procesu, lai ievadītu savu kodu. Kad tiek izpildīts /usr/bin/su, kodols ielādē modificēto versiju no atmiņas, izpildot ievadīto kodu ar root privilēģijām.

kopēšana neizdevās

Pēc CVE-2026-31431 ievainojamības atklāšanas , ko Xint Code pētnieki nodēvējuši par "kopēšanas kļūmi", Linux drošība saskaras ar vēl vienu izaicinājumu. Tālu no teorētiska trūkuma, šī dizaina problēma ļauj neprivileģētam lokālajam lietotājam paredzami un nemanāmi palielināt savas privilēģijas un iegūt pilnīgu superlietotāja piekļuvi.

Pētnieki min, ka šī nepilnība ir veiksmīgi izmantota tādās vadošajās distribūcijās kā Ubuntu, Amazon Linux, RHEL un SUSE, apstiprinot, ka jebkura sistēma, kurā darbojas kodols, kas jaunāks par 4.14 versiju un saglabā atbalstu AF_ALG ligzdām, ir potenciāli neaizsargāta pret šo uzbrukumu.

Darbības uz vietas un lapas kešatmiņas pārpilde

Runājot par ievainojamību, tiek minēts, ka tā radusies 2017. gadā ieviestās kodola kriptogrāfiskās API (AF_ALG) optimizācijas rezultātā. Šīs modifikācijas mērķis bija novērst nevajadzīgu buferizāciju, veicot autentificētas šifrēšanas operācijas (AEAD) tieši tajā pašā atmiņas vietā, kas pazīstamas kā "in-place" operācijas.

Kritiskā problēma rodas, apvienojot šo optimizāciju ar splice() funkciju, kas pārsūta datus starp failu deskriptoriem, pārsūtot tiešas atsauces uz kodola lapas kešatmiņu, nevis fiziski kopējot datus. Pieprasot atšifrēšanu, atmiņas struktūra tika konfigurēta tā, lai mērķa buferis, kam vajadzētu būt pagaidu vietai lietotājam, galu galā būtu tieši saistīts ar kešatmiņas lapām, kurās atrodas sistēmas failu dati.

Autentifikācija un rakstīšana ārpus atmiņas robežām

Galvenais ievainojamības izraisītājs ir anomālā autentifikācijas algoritma darbība. Atšķirībā no citām kriptogrāfiskām rutīnām, kas stingri ievēro mērķa buferu robežas, šis specifiskais algoritms izmanto lietotāja atmiņu kā pagaidu darba vietu (skrāpju paliktni), lai pārkārtotu baitu secības autentifikācijas tagu aprēķināšanas laikā.

Šajā procesā algoritms ieraksta četrus baitus ārpus noteiktās izvades apgabala robežas. Pateicoties optimizācijai uz vietas un splice() izveidotajai atsauces ķēdei, šis šķietami nekaitīgais ieraksts šķērso lietotāja atmiņas robežu un nonāk tieši kodola kešatmiņas lapā, kas saistīta ar apstrādājamo failu.

Šī loģisko trūkumu ķēde dod uzbrucējam iespēju patvaļīgi pārrakstīt četrus baitus noteiktās lapas kešatmiņas pozīcijās jebkuram failam, ko tas var nolasīt. Nosūtot virkni aprēķinātu pieprasījumu, uzbrucējs var ievietot ļaunprātīgu kodu kritiski svarīgu izpildāmo failu atmiņā esošajā versijā ar iestatītu suid bitu, piemēram, lietotāja pārslēdzēja rīkā.

Tā kā visas lasīšanas operācijas vispirms vaicā lapas kešatmiņu, nākamajā reizē, kad tiks izsaukta likumīgā utilīta, sistēma izpildīs ievadīto kodu no atmiņas, piešķirot tūlītējas root privilēģijas, nekad nemainot fizisko failu cietajā diskā. Vēl satraucošāk ir tas, ka, tā kā konteinera izolācija koplieto pamatā esošā resursdatora lapas kešatmiņu, šī ievainojamība kalpo kā tieša vārteja, lai izkļūtu no virtualizētām vidēm, piemēram, Kubernetes klasteriem, un apdraudētu primāro mezglu.

Avārijas ielāpi un mazināšanas risinājumi

Ņemot vērā šīs nepilnības nopietnību, apkopes komandas ir ieviesušas ārkārtas atjauninājumus, kuros galīgais risinājums ir atjaunot optimizāciju uz vietas algif_aead.c failā, stingri atdalot avota un mērķa atmiņas sarakstus, lai novērstu kešatmiņas lapu nonākšanu rakstāmos ceļos.

Šie ielāpi jau ir integrēti kodola 6.18.22, 6.19.12 un 7.0 versijās un tiek pārnesti uz ilgtermiņa atbalsta filiālēm. Administratoriem, kuri nevar nekavējoties restartēt vai atjaunināt savus serverus, ieteicams atspējot kodola moduli algif_aead, ja tas tika kompilēts ārēji, vai arī ievērojami ierobežot AF_ALG ligzdu izveidi, izmantojot tādas drošības politikas kā SELinux — vairogu, kas, piemēram, ir pasargājis pašreizējās Android ierīces no šī apdraudējuma.

Visbeidzot, ja vēlaties uzzināt vairāk, informāciju varat atrast tālāk norādītajā saitē.


Pievienot kā vēlamo avotu pakalpojumā Google