CIFSwitch — vulnerabilità nel sottosistema CIFS del kernel Linux che consente di ottenere diritti di root

Sono stati svelati i dettagli e pubblicato un exploit per la vulnerabilità CIFSwitch (CVE non ancora assegnato) nel modulo 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 sotto forma di patch, pubblicata il 16 maggio e accettata nel ramo principale del kernel Linux il 19 maggio (le versioni correttive del kernel non sono ancora disponibili).

La vulnerabilità riguarda il codice che fornisce supporto per il meccanismo cifs.spnego per eseguire l'autenticazione tramite il protocollo SPNEGO (Simple and Protected GSSAPI Negotiation) quando ci si connette a server SMB. Quando si utilizza 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 falsa "CIFS SPNEGO". Nel gestore cifs.upcall non vengono effettuati controlli aggiuntivi sulla correttezza dei parametri passati attraverso il kernel, tra cui valuta i valori attendibili dei campi pid, uid, creduid e
upcall_target. Una volta attivato, il gestore cifs.upcall cambia negli spazi dei nomi del processo utente attraverso cui è stata inviata la richiesta e, fino al ripristino dei privilegi, esegue una ricerca nella base dati di sistema NSS (Name Service Switch).

Un attaccante può avviare il proprio processo in uno spazio di nomi separato dei punti di montaggio, il che porterà a un accesso a NSS nel suo contesto. Per sfruttare la vulnerabilità è sufficiente posizionare un proprio file di configurazione /etc/nsswitch.conf e un insieme di librerie fasulle libnss_*.so.2 all'interno dell'ambiente creato dall'attaccante. L'esecuzione di una richiesta NSS da parte del gestore cifs.upcall porterà al caricamento delle librerie sostituite dall'attaccante con diritti di root.

Per sfruttare la vulnerabilità, nel sistema deve essere consentita la creazione di spazi di nomi per identificatori utenti (user namespace) o punti di montaggio (mount namespace), ed è inoltre necessario che nel sistema sia installato il pacchetto cifs-utils. Le distribuzioni in cui è possibile sfruttare la vulnerabilità con la 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

Distribuzioni in cui per l'uso dell'exploit è necessaria l'installazione del pacchetto cifs-utils:

  • Ubuntu 18.04/20.04/22.04 Desktop/Server
  • Pop!_OS 22.04 Intel/24.04 Generic
  • Ubuntu 24.04 Desktop minimal/full 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

Distribuzioni in cui la configurazione predefinita applica impostazioni che bloccano l'exploitation delle vulnerabilità tramite SELinux o Apparmor, anche in presenza del pacchetto cifs-utils:

  • 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 soluzione alternativa, è 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»

È anche possibile 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

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster