Linuxista poistetaan AF_ALG:sta zero-copy turvallisuussyistä

Linuxi krüptograafia alamsüsteemis on plaanis toetuse eemaldamine zero-copy liidestest AF_ALG algoritmide tüüpide jaoks SKCIPHER ja AEAD. Muudatus on juba cryptodevi puus ja ootab edastamist sulandumise aknasse Linux 7.2, mis peaks avanema juunis. Selle põhjuseks on kasvavad mured zero-copy mehhanismide turvalisuse üle, eriti pärast hiljutisi haavatavusi Linuxi krüptograafia koodis.

AF_ALG — see on kasutajaliides Linuxi tuumkrüptograafia API-le. Selle kaudu saavad programmid juurdepääsu tuumdes paiknevatele krüpteerimis-, hashimis- ja AEAD-algoritmide rakendustele, nagu soketid. Linuxi dokumentatsioon kirjeldab eraldi AF_ALG zero-copy režiimi splice() ja vmsplice() kaudu, mille korral tuum püüab vältida andmete ülemäärast kopeerimist tuumamällu.

Probleem on selles, et AF_ALG korral ei olnud see jõudluse kasu nii oluline ja riskid liiga suured. Muudatuse autor, Linuxi krüptograafia alamsüsteemi arendaja Eric Biggers Google’ist, et, et zero-copy võimaldab kasutajaruumi krüptograafilisi operatsioone otse page cache failide lehtedel, nagu näiteks binaarfail su, ning loob tingimused TOCTOU-tüüpi haavatavustele, kus mälu võib muutuda samal ajal, kui selle üle operatsiooni tehakse.

Teisisõnu, mehanism, mis on kasulik võrgus või failide sisend-väljundis, näeb AF_ALG-is välja nagu liiga ohtlik optimeerimine. AF_ALG-i ise, arendaja sõnul, hoitakse praegu enamasti tagasiühilduvuse nimel, et toetada väikest hulka programme, nagu iwd, mis ei ole veel kasutajaruumi krüptograafiale üle läinud. Alguses oli AF_ALG mõeldud ka riistvara krüptokiirendite access'i jaoks, kuid praktikas on see osutunud selle ülesande jaoks mitte liiga efektiivseks liideseks.

Oluline on märkida, et see ei tähenda splice() või sendfile() täielikku eemaldamist AF_ALG jaoks. Muudatus on kirjeldatud kui 'pehme rikete' ühilduvus: andmete edastamine AF_ALG-päringutes splice() ja sendfile() kaudu jätkab toimimist, kuid tuuma nüüd teeb enne krüptograafilist operatsiooni sisemise stabiilse koopia andmetest. Mõnel juhul võib jõudlus väheneda, kuid kasutaja API ei purune ametlikult.

Erakordselt rõhutatakse, et zero-copy eemaldatakse skcipher ja aead. Tüüpide tugi hash kaalutakse eraldi.

Muudatuse kontekst on ebameeldiv. Aprilli lõpus ilmus haavatavus Copy Fail (CVE-2026-31431) algif_aead'i, mis on just kasutaja krüpto liidese AF_ALG osa. Uurijad näitasid, et AF_ALG, splice() ja AEAD-töötlemise omaduste kombinatsioon võimaldas madala privileegiga kasutajal kahjustada page cache'i, sealhulgas andmeid, mis vastavad setuid-binaaridele, ning saada root-privileegide tõus.


Ilmumine Copy Fail oli seotud 2017. aasta optimeerimisega, mis viis AEAD-operations'i töötlemise "kohapeal"; faili edastamisel splice() kaudu töötas AF_ALG südamik mitte koopia, vaid lehtede page cache viidetes. Selle tulemusena võis osa andmetest, mis olid arvatud vaid sisenditeks, sattuda kirjutatavasse scatterlist'i.

Zero-copy eemaldamine AF_ALG ei ole pelgalt ühe haavatavuse parandamine. Pigem on see katses kõrvaldada terve klass riskantseid stsenaariume, mis esinevad vähekasutatavas UAPI-s, kus optimeerimisest saadav kasu ei õigusta keerukust ja võimalikke tagajärgi. Tavalistele kasutajatele jääb muudatus tõenäoliselt märkamatuks; harvade programmide jaoks, mis aktiivselt kasutavad AF_ALG-i läbi splice() või sendfile(), võib esineda jõudluse langust täiendava kopeerimise tõttu.

Allikas: linux.org.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster