CIFSwitch — luka w podsystemie CIFS jądra Linux, pozwalająca na uzyskanie uprawnień root

Opublikowano szczegóły oraz exploit dotyczący luki w CIFSwitch (CVE jeszcze nie przypisany) w module jądra CIFS oraz narzędziach cifs-utils, która pozwala użytkownikowi bez uprawnień na uzyskanie praw root w systemie. Poprawka jest dostępna tylko w postaci łatki, która została opublikowana 16 maja, a 19 maja przyjęta do głównej gałęzi jądra Linux (poprawki jądra jeszcze nie są dostępne).

Luka dotyczy kodu, który zapewnia obsługę mechanizmu cifs.spnego do realizacji uwierzytelnienia za pomocą protokołu SPNEGO (Simple and Protected GSSAPI Negotiation) przy połączeniu z serwerami SMB. Przy użyciu cifs.spnego do ustalania kluczy z Kerberos/SPNEGO, jądro wywołuje handler cifs.upcall, dostarczany przez pakiet cifs-utils, który działa w przestrzeni użytkownika z prawami root.

Użytkownik bez uprawnień może zainicjować wywołanie handlera, wysyłając żądanie, które wymaga uzyskania klucza „cifs.spnego”, z fałszywym opisem „CIFS SPNEGO”. W handlerze cifs.upcall nie wykonuje się dodatkowych kontroli poprawności parametrów przekazywanych przez jądro, między innymi akceptuje wartości pól pid, uid, creduid oraz
upcall_target. Po uruchomieniu, handler cifs.upcall przełącza się do przestrzeni nazw procesu użytkownika, przez który wysłano żądanie, i przed zresetowaniem uprawnień przeszukuje bazę systemową NSS (Name Service Switch).

Atakujący może uruchomić swój proces w oddzielnej przestrzeni nazw punktów montowania, co spowoduje realizację zapytania do NSS w jego kontekście. Aby wykorzystać lukę, wystarczy w utworzonej przez atakującego przestrzeni umieścić własny plik konfiguracyjny /etc/nsswitch.conf oraz zestaw podstępnych bibliotek libnss_*.so.2. Wykonanie zapytania NSS przez handler cifs.upcall spowoduje załadowanie podstawionych przez atakującego bibliotek z prawami root.

Aby wykorzystać lukę, w systemie musi być dozwolone tworzenie przestrzeni nazw identyfikatorów użytkowników (user namespace) lub punktów montowania (mount namespace), a także wymagany jest zainstalowany w systemie pakiet cifs-utils. Dystrybucje, w których możliwa jest exploatacja luki w domyślnej konfiguracji:

  • 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

Dystrybucje, które wymagają zainstalowania pakietu cifs-utils do działania exploita:

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

Dystrybucje, w których domyślna konfiguracja stosuje ustawienia blokujące wykorzystanie luki przez SELinux lub Apparmor, nawet przy zainstalowanym pakiecie 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

Jako obejście ochrony można zablokować automatyczne ładowanie modułu jądra cifs:

sh -c «printf ‘install cifs /bin/false\n’ > /etc/modprobe.d/cifs.conf; rmmod cifs 2>/dev/null; true»

Można także zabronić korzystania z przestrzeni nazw użytkowników (czyli „sysctl -w kernel.unprivileged_userns_clone=0”) oraz usunąć lub nadpisać regułę cifs.spnego w ustawieniach cifs-utils:

cat >/etc/request-key.d/cifs.spnego.conf <‘EOF’
create cifs.spnego * * /usr/sbin/keyctl negate %k 30 %S
EOF

Tymczasem, 28 maja opublikowano 137 raportów o lukach w jądrze Linux, a 27 maja – 277 raportów.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster