Obrtnik sigurnosti Asim Manizada otkrio ranjivost CIFSwitch — lokalno povećanje privilegija u kombinaciji s Linux jezgrom i korisničkim paketom cifs-utils. Problem se odnosi na put obrade CIFS/SMB Kerberos/SPNEGO upcall, odnosno mehanizam putem kojeg CIFS-klijent jezgre traži od korisničkog helper-a podatke za Kerberos autentifikaciju prilikom montiranja SMB resursa. Opis je objavljen nakon isteka embarga linux-distros; identifikator CVE na trenutak objavljivanja još nije bio dodeljen.
Suština ranjivosti je u tome, da je neprivilegovani korisnik mogao pozvati request_key("cifs.spnego", …) i proslijediti lažni opis ključa. U normalnom scenariju ovu liniju bi trebao formirati sam CIFS-klijent jezgre: u njoj se nalaze informacije o serveru, UID, credential UID, PID, cilju upcall-a i drugim parametrima. Međutim, jezgra nije proveravala da li opis zaista dolazi iz CIFS podsystem-a, a cifs.upcall, koji pokreće root preko standardnog pravila request-key, verovao je tim poljima kao podacima koje je kreirala jezgra.
Ranjivost nije univerzalna „rupa u svakom Linuxu iz kutije“. Da bi se iskoristila, moraju se poklopiti nekoliko uslova: prisustvo ranjive jezgre, instalirani cifs-utils sa pravilom cifs.spnego, mogućnost za neprivilegovane korisnike da kreiraju user/mount namespaces i odsustvo blokade od strane SELinux, AppArmor ili druge LSM politike. U poruci na oss-security posebno je naglašeno da u ranjivim sistemima ovo daje put od neprivilegovanog lokalnog korisnika do izvršavanja koda od roota.
Tehnički lanac se gradi oko toga, da cifs.upcall može preći u imenske prostore navedene u lažnom opisu i izvršiti NSS upit do konačnog vraćanja privilegija. Kao rezultat, okruženje pod kontrolom napadača može uticati na učitavanje NSS modula od strane root procesa. U javnim opisima se naglašava da je ovo zapravo logička greška na granici jezgre i korisničkog prostora, a ne klasična ranjivost korupcije memorije.
Ispravka u jezgri se pokazala kao mala: za tipove ključeva cifs.spnego dodana je provera koja odbacuje opise koje nije sam CIFS-klijent kreirao sa svojim privatnim spnego_cred. Ovaj pristup zatvara klasu napada bez obaveznih sinhronizovanih promena u cifs-utils, iako autor napominje da je dodatno pojačanje korisničkog prostora i dalje poželjno.
AlmaLinux je izvestila, da je osnovna logika prisotna v vseh podprtih različicah AlmaLinux, se šteje, da so AlmaLinux 8, 9, 10 in Kitten 10 prizadeti, če je nameščen cifs-utils. Zakrpljena jedra so bila pripravljena v testing-repozitorijih: za AlmaLinux 9 je naveden paket kernel-5.14.0-687.5.4.el9_8 ali novejši, za AlmaLinux 10 — kernel-6.12.0-211.7.4.el10_2 ali novejši.
Kot začasne ukrepe pred namestitvijo popravljenega jedra se priporoča odstranitev cifs-utils, če SMB/CIFS-odjemalec v sistemu ni v uporabi, prepoved nalaganja modula cifs, prepisovanje pravila cifs.spnego v request-key, ali onemogočitev neprivilegiranih uporabniških namespacov. Ti obvozni ukrepi lahko uničijo Kerberos avtorizacijo za CIFS-montaže, zato je treba te ukrepe previdno uporabiti na strežnikih, kjer so dejansko uporabljeni Kerberos-avtorizirani SMB-deli.
CIFSwitch je zanimiv tudi v kontekstu odkrivanja: avtor jo opisuje kot rezultat iskanja večstopenjskih verig z uporabo LLM in grafične predstavitve povezav med objekti varnosti. Vendar je praktični zaključek za sisteme administracije precej prizemljen: preveriti prisotnost cifs-utils, stanje uporabniških namespace-ov in posodobitve jedra, zlasti v sistemih, kjer so lokalni uporabniki ali skripte v kontejnerjih z razširjenimi možnostmi namespace.
Izvor: linux.org.ru
