Ricercatore della sicurezza Asim Manizada ha rivelato una vulnerabilità CIFSwitch — escalation locale dei privilegi nella combinazione del kernel Linux e del pacchetto utente cifs-utils. Il problema riguarda il percorso di elaborazione CIFS/SMB Kerberos/SPNEGO upcall, cioè il meccanismo attraverso il quale il client CIFS del kernel chiede al helper utente dati per l'autenticazione Kerberos quando monta risorse SMB. La descrizione è stata pubblicata dopo la scadenza dell'embargo linux-distros; l'identificatore CVE al momento della pubblicazione non era ancora stato assegnato.
Il cuore della vulnerabilità è che, un utente non privilegiato potrebbe chiamare request_key("cifs.spnego", …) e fornire una descrizione del key falsificata. In uno scenario normale, questa stringa dovrebbe essere generata dal client CIFS del kernel: contiene informazioni sul server, UID, credential UID, PID, obiettivo upcall e altri parametri. Tuttavia, il kernel non controllava che la descrizione provenisse effettivamente dal sottosistema CIFS, e cifs.upcall, eseguito da root tramite la regola request-key standard, si fidava di questi campi come dati generati dal kernel.
La vulnerabilità non è una «falla in qualsiasi Linux di default». Per sfruttarla devono coincidere diversi fattori: presenza di un kernel vulnerabile, cifs-utils installato con la regola cifs.spnego, la possibilità per gli utenti non privilegiati di creare spazi dei nomi user/mount, e assenza di blocchi da parte di SELinux, AppArmor o di un'altra politica LSM. In un messaggio su oss-security si sottolinea che sui sistemi vulnerabili questo consente un passaggio da un utente locale non privilegiato all'esecuzione di codice come root.
Dal punto di vista tecnico la catena si costruisce attorno a, che cifs.upcall può passare agli spazi dei nomi indicati nella descrizione falsificata e eseguire una query NSS fino al definitivo abbattimento dei privilegi. Di conseguenza, un ambiente controllato dall'attaccante può influenzare il caricamento del modulo NSS da parte del processo root. Nelle descrizioni pubbliche si sottolinea che si tratta di un errore logico al confine tra kernel e spazio utente, e non di una classica vulnerabilità di corruzione della memoria.
La correzione nel kernel si è rivelata di piccole dimensioni: per il tipo di chiavi cifs.spnego è stata aggiunta una verifica che rifiuta le descrizioni create non dal client CIFS stesso con le sue credenziali private spnego_cred. Questo approccio chiude una classe di attacchi senza la necessità di modifiche sincrone obbligatorie in cifs-utils, anche se l'autore sottolinea che un ulteriore rafforzamento dello spazio utente è comunque auspicabile.
AlmaLinux ha riportato, che la logica di base è presente in tutte le versioni supportate di AlmaLinux, mentre AlmaLinux 8, 9, 10 e Kitten 10 sono considerati interessati in presenza di cifs-utils installato. I kernel patchati sono stati preparati nei repository di testing: per AlmaLinux 9 è indicato il pacchetto kernel-5.14.0-687.5.4.el9_8 o successivo, per AlmaLinux 10 - kernel-6.12.0-211.7.4.el10_2 o successivo.
Come misura temporanea fino all'installazione del kernel corretto, si suggerisce di rimuovere cifs-utils, se il client SMB/CIFS non viene utilizzato nel sistema, impedire il caricamento del modulo cifs, sovrascrivere la regola cifs.spnego nella request-key o disabilitare i namespace utente non privilegiati. Queste misure di emergenza possono interrompere l'autenticazione Kerberos per i mount CIFS, quindi nei server in cui si utilizzano congiuntamente le condivisioni SMB autenticate via Kerberos, è necessario applicarle con cautela.
CIFSwitch è interessante anche nel contesto della scoperta: l'autore la descrive come il risultato di una ricerca di catene a più passaggi utilizzando LLM e una rappresentazione grafica delle relazioni tra oggetti di sicurezza. Ma la conclusione pratica per gli amministratori è piuttosto concreta: controllare la presenza di cifs-utils, lo stato dei namespace utente e gli aggiornamenti del kernel, specialmente sui sistemi in cui ci sono utenti locali o scenari containerizzati con ampie capacità nei namespace.
Fonte: linux.org.ru
