Ricercatore di sicurezza Asim Manizada ha rivelato una vulnerabilità CIFSwitch — elevazione locale dei privilegi in un legame tra il kernel Linux e un 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 richiede dati per l'autenticazione Kerberos a un helper utente durante il montaggio delle risorse SMB. La descrizione è stata pubblicata dopo la scadenza del divieto di linux-distros; l'ID CVE non era ancora stato assegnato al momento della pubblicazione.
Il punto della vulnerabilità è che, un utente non privilegiato poteva chiamare request_key("cifs.spnego", ...) e fornire una descrizione della chiave 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 verificava che la descrizione provenisse realmente dal sotto-sistema CIFS, e cifs.upcall, eseguito da root tramite la regola standard di request-key, si fidava di questi campi come dati creati dal kernel.
La vulnerabilità non è universale «una falla in qualsiasi Linux out-of-the-box». Per sfruttarla, devono verificarsi diverse condizioni: deve esserci un kernel vulnerabile, cifs-utils installato con la regola cifs.spnego, la possibilità per utenti non privilegiati di creare spazi dei nomi user/mount e l'assenza di blocchi da parte di SELinux, AppArmor o altre politiche LSM. Nel messaggio su oss-security si specifica inoltre che, sui sistemi vulnerabili, questo consente di passare da un utente locale non privilegiato all'esecuzione di codice come root.
Tecnicamente la catena si costruisce attorno a quello, che cifs.upcall può passare negli spazi dei nomi specificati nella falsa descrizione e effettuare una richiesta NSS fino al rinvio finale dei privilegi. Di conseguenza, un ambiente controllato dall'attaccante può influenzare il caricamento del modulo NSS da parte del processo root. Nei resoconti pubblici si sottolinea che si tratta di un errore logico al confine tra kernel e user space, e non di una classica vulnerabilità di corruzione della memoria.
La correzione nel kernel si è rivelata di dimensioni contenute: per il tipo di chiavi cifs.spnego è stata aggiunta una verifica che rifiuta le descrizioni create non dal client CIFS con le sue credenziali spnego_cred private. Questo approccio chiude una classe di attacchi senza modifiche sincrone obbligatorie in cifs-utils, sebbene l'autore sottolinei che un ulteriore rafforzamento nel user space sia comunque auspicabile.
AlmaLinux ha comunicato, che la logica di base è presente in tutte le versioni supportate di AlmaLinux, e che AlmaLinux 8, 9, 10 e Kitten 10 sono considerati colpiti se 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 misure temporanee fino all'installazione del kernel corretto, si suggerisce di rimuovere cifs-utils se il client SMB/CIFS non viene utilizzato nel sistema, vietare il caricamento del modulo cifs, sovrascrivere la regola cifs.spnego in request-key o disabilitare i namespace utente non privilegiati. Queste misure di emergenza possono compromettere l'autenticazione Kerberos per i mount CIFS, quindi sui server dove si utilizzano realmente condivisioni SMB authenticate con Kerberos, devono essere applicate con cautela.
CIFSwitch è interessante anche per il contesto della rilevazione: l'autore la descrive come risultato della ricerca di catene multistep utilizzando LLM e la rappresentazione grafica delle relazioni tra gli oggetti di sicurezza. Tuttavia, la conclusione pratica per gli amministratori è piuttosto concreta: verificare la presenza di cifs-utils, lo stato dei namespaces utente e gli aggiornamenti del kernel, specialmente sui sistemi con utenti locali o scenari containerizzati con capacità avanzate di namespace.
Fonte: linux.org.ru
