Detalii despre vulnerabilitatea CIFSwitch (CVE încă nu a fost atribuit) din modulul kernel CIFS și din toolkit-ul cifs-utils au fost dezvăluite, permițând unui utilizator fără privilegii să obțină drepturi root în sistem. O soluție este disponibilă doar sub formă de patch, care a fost publicată pe 16 mai și acceptată în ramura principală a kernel-ului Linux pe 19 mai (releases corective ale kernel-ului nu sunt încă disponibile).
Vulnerabilitatea afectează codul care suportă mecanismul cifs.spnego pentru autentificarea prin protocolul SPNEGO (Simple and Protected GSSAPI Negotiation) atunci când se conectează la servere SMB. Atunci când se utilizează cifs.spnego pentru determinarea cheilor din Kerberos/SPNEGO, kernel-ul apelează handlerul cifs.upcall, furnizat de pachetul cifs-utils și executat în spațiul utilizatorului cu privilegii root.
Un utilizator fără privilegii poate iniția apelul handler-ului trimițând o cerere care necesită obținerea cheii „cifs.spnego”, cu o descriere falsă „CIFS SPNEGO”. În handlerul cifs.upcall nu se efectuează verificări suplimentare de validitate a parametrilor transmiși prin kernel, printre altele, acesta percepe valorile câmpurilor pid, uid, creduid și
upcall_target ca fiind de încredere. După activare, handlerul cifs.upcall comută în spațiile numelui ale procesului utilizator care a trimis cererea și caută în baza de date sistemică NSS (Name Service Switch) până la resetarea privilegiilor.
Atacatorul poate lansa propriul său proces într-un spațiu numelui separat de puncte de montare, ceea ce va duce la efectuarea unei apelări NSS în contextul său. Pentru a exploata vulnerabilitatea, este suficient ca în mediu creat de atacator să fie plasat propriul fișier de configurare /etc/nsswitch.conf și un set de biblioteci false libnss_*.so.2. Executarea unei cereri NSS de către handler-ul cifs.upcall va duce la încărcarea bibliotecilor false controlate de atacator cu privilegii root.
Pentru a exploata vulnerabilitatea, în sistem trebuie să fie permisă crearea unor spații de nume de identificare a utilizatorului (user namespace) sau puncte de montare (mount namespace), iar sistemul trebuie să aibă instalat pachetul cifs-utils. Distribuțiile în care exploatarea vulnerabilității este posibilă în configurația implicită sunt:
- 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
Distribuții care necesită instalarea pachetului cifs-utils pentru funcționarea exploit-ului:
- Ubuntu 18.04/20.04/22.04 Desktop/Server
- Pop!_OS 22.04 Intel/24.04 Generic
- Ubuntu 24.04 Desktop minimal/plin și Server
- Debian 11/12/13 netinst standard și 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
Distribuții în care configurația implicită aplică setări ce blochează exploatarea vulnerabilității prin SELinux sau Apparmor, chiar și cu pachetul 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
Ca soluție alternativă pentru protecție, se poate bloca încărcarea automată a modulului kernel cifs:
sh -c «printf 'install cifs /bin/false\n' > /etc/modprobe.d/cifs.conf; rmmod cifs 2>/dev/null; true»
De asemenea, se poate interzice utilizarea user namespace („sysctl -w kernel.unprivileged_userns_clone=0”) și elimina sau suprascrie regula cifs.spnego în setările cifs-utils:
cat >/etc/request-key.d/cifs.spnego.conf <‘EOF’
create cifs.spnego * * /usr/sbin/keyctl negate %k 30 %S
EOF
Între timp, pe 28 mai au fost publicate 137 de rapoarte despre vulnerabilități în kernelul Linux, iar pe 27 mai — 277 de rapoarte.
Sursa: opennet.ro
