Opublikowano lukę LPE CIFSwitch w Linux CIFS/cifs-utils

Badacz bezpieczeństwa Asim Manizada ujawnili lukę CIFSwitch — lokalne podniesienie uprawnień związane z jądrem Linuksa i pakietem użytkownika cifs-utils. Problem dotyczy ścieżki przetwarzania CIFS/SMB Kerberos/SPNEGO upcall, czyli mechanizmu, przez który klient CIFS w jądrze żąda od użytkownika helpera danych do uwierzytelnienia Kerberos podczas montowania zasobów SMB. Opis został opublikowany po zakończeniu embargo na linux-distros; identyfikator CVE w momencie publikacji jeszcze nie został przypisany.

Istota luki polega na tym, że użytkownik bez przywilejów mógł wywołać request_key("cifs.spnego", …) i przekazać fałszywy opis klucza. W normalnym scenariuszu taki ciąg powinien być tworzony przez samego klienta CIFS w jądrze: zawiera on informacje o serwerze, UID, credential UID, PID, cel upcall i inne parametry. Jednak jądro nie sprawdzało, czy opis rzeczywiście pochodzi z podsystemu CIFS, a cifs.upcall, uruchamiane przez root za pośrednictwem standardowej reguły request-key, ufało tym polom jako danym stworzonym przez jądro.

Luka nie jest uniwersalna "dziurą w żadnym Linuksie z pudełka". Aby zrealizować atak, muszą zaistnieć pewne warunki: obecność podatnego jądra, zainstalowany cifs-utils z regułą cifs.spnego, możliwość dla nieuprzywilejowanych użytkowników do tworzenia przestrzeni nazw użytkownika/montowania oraz brak blokady ze strony SELinux, AppArmor lub innej polityki LSM. W wiadomości na oss-security wyraźnie zaznaczone jest, że na podatnych systemach to daje drogę od nieuprzywilejowanego lokalnego użytkownika do wykonania kodu z uprawnieniami roota.


Technicznie łańcuch opiera się na tym, że cifs.upcall może przechodzić do nazw przestrzeni określonych w fałszywym opisie i wykonywać zapytanie NSS do ostatecznego zrzucenia uprawnień. W rezultacie otoczenie kontrolowane przez atakującego może mieć wpływ na załadowanie modułu NSS przez proces roota. W publicznych opisach podkreśla się, że to właśnie błąd logiczny na granicy jądra i przestrzeni użytkownika, a nie klasyczna luka w pamięci.

Naprawa w jądrze okazała się niewielka: dla typu kluczy cifs.spnego dodano sprawdzenie odrzucające opisy, które nie zostały stworzone przez samego klienta CIFS z jego prywatnymi spnego_cred. Takie podejście zamyka klasę ataków bez obowiązkowych synchronizacji w cifs-utils, chociaż autor zauważa, że dodatkowe wzmocnienie przestrzeni użytkownika i tak jest pożądane.

AlmaLinux poinformował, ta podstawowa logika jest obecna we wszystkich wspieranych wydaniach AlmaLinux, a AlmaLinux 8, 9, 10 oraz Kitten 10 są uznawane za dotknięte w przypadku zainstalowanego cifs-utils. Zaktualizowane jądra zostały przygotowane w repozytoriach testing: dla AlmaLinux 9 podano pakiet kernel-5.14.0-687.5.4.el9_8 lub nowszy, a dla AlmaLinux 10 — kernel-6.12.0-211.7.4.el10_2 lub nowszy.

Jako tymczasowe środki aż do zainstalowania poprawionego jądra sugeruje się usunięcie cifs-utils, jeśli klient SMB/CIFS nie jest używany w systemie, zablokowanie załadunku modułu cifs, nadpisanie reguły cifs.spnego w request-key lub wyłączenie uprzywilejowanych przestrzeni nazw użytkowników. Te obejścia mogą złamać autoryzację Kerberos dla montowań CIFS, dlatego na serwerach, gdzie rzeczywiście używane są udostępnione zasoby SMB z autoryzacją Kerberos, należy stosować je ostrożnie.

CIFSwitch jest również interesująca w kontekście wykrywania: autor opisuje ją jako wynik poszukiwania wieloetapowych łańcuchów za pomocą LLM i graficznego przedstawienia powiązań między obiektami bezpieczeństwa. Jednak praktyczny wniosek dla administratorów jest całkiem przyziemny: sprawdzić obecność cifs-utils, stan przestrzeni nazw użytkowników oraz aktualizacje jądra, szczególnie w systemach, gdzie są lokalni użytkownicy lub skrypty kontenerowe z rozszerzonymi możliwościami przestrzeni nazw.

Źródło: linux.org.ru

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