Cercetător de securitate Asim Manizada a descoperit o vulnerabilitate CIFSwitch — escaladarea privilegiilor locale în legătura dintre kernelul Linux și pachetul utilizatorului cifs-utils. Problema afectează calea de procesare CIFS/SMB Kerberos/SPNEGO upcall, adică mecanismul prin care clientul CIFS din kernel solicită informații pentru autentificarea Kerberos de la helper-ul utilizatorului atunci când montează resurse SMB. Descrierea a fost publicată după expirarea embargoului linux-distros; identificatorul CVE nu fusese încă atribuit la momentul publicării.
Substanța vulnerabilității este că, un utilizator fără privilegii putea apela request_key("cifs.spnego", …) și transmite o descriere falsificată a cheii. Într-un scenariu normal, un astfel de șir ar trebui să fie generat de clientul CIFS din kernel: acesta conține informații despre server, UID, credential UID, PID, scopul upcall-ului și alte parametrii. Totuși, kernelul nu verifica dacă descrierea a venit cu adevărat din subsistemul CIFS, iar cifs.upcall, demarat de root prin regula standard request-key, avea încredere în aceste câmpuri ca fiind date create de kernel.
Vulnerabilitatea nu este o problemă universală „o breșă în orice Linux din fabrică”. Pentru a exploata aceasta, trebuie să coincidă mai multe condiții: un kernel vulnerabil, cifs-utils instalat cu regula cifs.spnego, capacitatea utilizatorilor fără privilegii de a crea user/mount namespaces, precum și absența blocărilor din partea SELinux, AppArmor sau altă politică LSM. Într-un anunț pe oss-security, s-a specificat în mod special că pe sistemele vulnerabile aceasta oferă un traseu de la un utilizator local fără privilegii la executarea de cod din partea root.
Din punct de vedere tehnic lanțul se construiește în jurul faptului, că cifs.upcall poate trece în spațiile de nume specificate în descrierea falsificată și efectua o solicitare NSS până la resetarea finală a privilegiilor. Ca rezultat, un mediu controlat de atacator poate influența încărcarea modulului NSS de către procesul root. În descrierile publice se subliniază că aceasta este o eroare logică la limita dintre kernel și user space, nu o vulnerabilitate clasică de corupție a memoriei.
Corectarea din kernel s-a dovedit a fi redusă: pentru tipul de chei cifs.spnego a fost adăugată o verificare care respinge descrierile create nu de clientul CIFS, cu spnego_cred-urile sale private. Această abordare închide un tip de atacuri fără modificări sincrone obligatorii în cifs-utils, deși autorul subliniază că întărirea suplimentară a user space-ului rămâne dorită.
AlmaLinux a anunțat, logică de bază este prezentă în toate versiunile acceptate de AlmaLinux, iar AlmaLinux 8, 9, 10 și Kitten 10 sunt considerate afectate dacă cifs-utils este instalat. Kernelurile patch-uite au fost pregătite în repozitoarele testing: pentru AlmaLinux 9, pachetul kernel-5.14.0-687.5.4.el9_8 sau mai recent, iar pentru AlmaLinux 10 — kernel-6.12.0-211.7.4.el10_2 sau mai recent.
Ca măsură temporară până la instalarea kernelului corectat, se recomandă să se elimine cifs-utils, dacă clientul SMB/CIFS nu este utilizat pe sistem, să se interzică încărcarea modulului cifs, să se redefinească regula cifs.spnego în request-key sau să se dezactiveze namespace-urile utilizatorilor neprivilegiați. Aceste măsuri compensatorii pot afecta autentificarea Kerberos pentru montările CIFS, deci pe servere unde se utilizează cu adevărat partajările SMB autentificate Kerberos, acestea trebuie aplicate cu precauție.
CIFSwitch este interesantă și în contextul descoperirii: autorul o descrie ca rezultat al căutării lanțurilor multi-pași utilizând LLM și reprezentarea grafică a legăturilor între obiecte de securitate. Dar concluzia practică pentru administratori este destul de pragmatică: verificarea prezenței cifs-utils, a stării namespace-urilor utilizatorilor și a actualizărilor kernelului, mai ales pe sistemele unde există utilizatori locali sau scenarii de containere cu capabilități extinse de namespace.
Sursa: linux.org.ru
