Sono emerse informazioni dettagliate e pubblicato un exploit per la vulnerabilità CIFSwitch (CVE non ancora assegnato) nel modulo del kernel CIFS e negli strumenti cifs-utils, che consente a un utente non privilegiato di ottenere diritti di root nel sistema. La correzione è disponibile solo come patch, pubblicata il 16 maggio e accettata nel ramo principale del kernel Linux il 19 maggio (le versioni corrette del kernel non sono ancora disponibili).
La vulnerabilità riguarda il codice che gestisce il supporto per il meccanismo cifs.spnego per l'autenticazione tramite il protocollo SPNEGO (Simple and Protected GSSAPI Negotiation) quando ci si connette ai server SMB. Utilizzando cifs.spnego per determinare le chiavi da Kerberos/SPNEGO, il kernel chiama il gestore cifs.upcall, fornito dal pacchetto cifs-utils e eseguito nello spazio utente con diritti di root.
Un utente non privilegiato può avviare una chiamata al gestore inviando una richiesta che richiede l'ottenimento della chiave 'cifs.spnego', con una descrizione contraffatta 'CIFS SPNEGO'. Nel gestore cifs.upcall non vengono eseguiti controlli aggiuntivi sulla correttezza dei parametri passati tramite il kernel, tra l'altro interpreta i valori affidabili dei campi pid, uid, creduid e
upcall_target. Dopo l'attivazione, il gestore cifs.upcall passa negli spazi dei nomi del processo utente attraverso il quale è stata inviata la richiesta e, fino al ripristino dei privilegi, esegue la ricerca nella base dati NSS (Name Service Switch).
Un attaccante può avviare il proprio processo in uno spazio dei nomi di montaggio separato, il che porterà all'esecuzione di una chiamata a NSS nel suo contesto. Per sfruttare la vulnerabilità, è sufficiente collocare all'interno dell'ambiente creato dall'attaccante il proprio file di configurazione /etc/nsswitch.conf e un set di librerie fittizie libnss_*.so.2. L'esecuzione di una richiesta NSS da parte del gestore cifs.upcall porterà al caricamento delle librerie sostituite dall'attaccante con i privilegi di root.
Per sfruttare la vulnerabilità, nel sistema deve essere consentita la creazione di spazi dei nomi degli identificatori utente (user namespace) o di punti di montaggio (mount namespace), e deve essere installato il pacchetto cifs-utils nel sistema. Le distribuzioni in cui è possibile sfruttare la vulnerabilità nella configurazione predefinita sono:
- Linux Mint Cinnamon 21.3/22.3
- CentOS Stream 9 GNOME
- Rocky Linux 9 Workstation
- Kali Linux
- AlmaLinux 9.7 Workstation
- SUSE 15 SP7/SAP 15 SP7/SAP 16
Distributivi che richiedono l'installazione del pacchetto cifs-utils per l'operatività dell'exploit:
- Ubuntu 18.04/20.04/22.04 Desktop/Server
- Pop!_OS 22.04 Intel/24.04 Generic
- Ubuntu 24.04 Desktop minima/completa e Server
- Debian 11/12/13 netinst standard e GNOME/KDE/standard/XFCE
- CentOS Stream 9 Cinnamon/KDE/MATE/XFCE
- Rocky Linux 9 KDE/Workstation-Lite
- openSUSE Leap 15.6 GNOME/KDE
- openSUSE Tumbleweed GNOME/KDE
- Rocky Linux 8 GenericCloud
- Oracle Linux 8/9 KVM
- Amazon Linux 2023 KVM
Distributivi con configurazioni predefinite che applicano impostazioni per bloccare l'exploitation delle vulnerabilità tramite SELinux o Apparmor, anche con il pacchetto cifs-utils presente:
- Ubuntu 26.04 Desktop/Server
- Fedora 40/41/42/43/44 Workstation/Server
- CentOS Stream 10 GNOME/KDE
- Rocky Linux 10 Workstation
- AlmaLinux 10.1 Workstation
- Oracle Linux 10 KVM
- openSUSE Tumbleweed GNOME/KDE
- openSUSE Leap 16.0 OEM GNOME/KDE/Minimal-VM
- SUSE Linux 16
Come contromisura, è possibile bloccare il caricamento automatico del modulo del kernel cifs:
sh -c «printf 'install cifs /bin/false\n' > /etc/modprobe.d/cifs.conf; rmmod cifs 2>/dev/null; true»
È possibile anche vietare l'uso del namespace utente («sysctl -w kernel.unprivileged_userns_clone=0») e rimuovere o ridefinire la regola cifs.spnego nelle impostazioni di cifs-utils:
cat >/etc/request-key.d/cifs.spnego.conf <<'EOF'
create cifs.spnego * * /usr/sbin/keyctl negate %k 30 %S
EOF
Nel frattempo, il 28 maggio sono stati pubblicati 137 rapporti sulle vulnerabilità nel kernel Linux, mentre il 27 maggio sono stati pubblicati 277 rapporti.
Fonte: opennet.ru
