Niestety przed samymi świętami (23 grudnia) zdarzyło się to, czego najbardziej obawiają się administratorzy systemów – ujawniono poważną lukę bezpieczeństwa w systemach Linux.
Zero Day Initiative (ZDI), firma zajmująca się badaniami nad podatnościami typu zero-day, ogłosiła nowy błąd jądra Linuksa. Luka umożliwia uwierzytelnionym użytkownikom zdalne ujawnianie poufnych informacji oraz uruchamianie kodu w podatnych na ataki wersjach jądra.
Pierwotnie ZDI oceniło podatność jako krytyczne 10 w skali od 0 do 10 powszechnego CVSS. Teraz luka ma „tylko” 9.6, co w praktyce przez cały czas oznacza „załataj najszybciej, jak się da!”.
Problem dotyczy programu ksmbd, wersji jądra 5.15 usługi Server Message Block (SMB). Konkretnie podatność występuje w przetwarzaniu poleceń SMB2_TREE_DISCONNECT i wynika z braku walidacji istnienia obiektu przed wykonaniem na nim operacji. Osoba atakująca może wykorzystać tę lukę do wykonania kodu w kontekście jądra.
Nowy moduł SMB, opracowany przez firmę Samsung, został wprowadzony do jądra Linux w 2021 roku. Jego celem było zapewnienie wysokiej wydajności w obsłudze plików SMB v3. Jak wiadomo, protokół SMB używany jest w systemie Windows, a w systemie Linux – jako nadrzędny protokół wymiany plików za pośrednictwem Samby. Podatny moduł ksmbd nie ma na celu zastąpienia Samby, ale jej uzupełnienie. Deweloperzy Samby i ksmbd pracują nad tym, aby programy działały wspólnie.
Jeremy Allison, współtwórca Samby, zauważa: „ksmbd nie współdzieli kodu z produkcyjną wersją protokołu Samba. Jest napisany całkowicie od zera. Tak więc obecna sytuacja nie ma nic wspólnego z serwerem plików Samba, który można bez obaw uruchamiać w swoich systemach”.
Każda dystrybucja korzystająca z jądra Linuksa 5.15 lub nowszego jest potencjalnie podatna na ataki. Obejmuje to Ubuntu 22.04 i jego następców oraz Deepin Linux 20.3. jeżeli chodzi o serwery, Ubuntu jest najbardziej niepokojące. Inne dystrybucje wykorzystywane przemysłowo, takie jak rodzina Red Hat Enterprise Linux (RHEL), nie używają jądra 5.15.
Aby zweryfikować, czy na konkretnej dystrybucji Linuksa uruchomiona jest podatna usługa, należy wykonać:
$ uname -r –aby zobaczyć, której wersji jądra używasz; $ modinfo ksmb – aby sprawdzić, czy podatny moduł jest obecny w systemie i uruchomiony.To, co chcemy zobaczyć, to to, iż moduł nie został znaleziony. jeżeli jest załadowany do pamięci, powinniśmy natychmiast wykonać aktualizację jądra Linux do wersji przynajmniej 5.15.61. Niestety nie wszystkie dystrybucje otrzymały już aktualizacje. Lista jest dostępna tutaj.
Niektórzy zastanawiają się, czy omawiana podatność jest rzeczywiście tak poważna, jeżeli nie nadano jej choćby numeru CVE. Greg Kroah-Hartmann, opiekun jądra Linuksa, wyjaśnił:
„…programiści jądra w ogóle nie pracują z CVE, ponieważ w większości nie są one odwzorowaniem konkretnych problemów”. To prawda, iż „niektóre organizacje linuksowe przez cały czas nalegają na przypisywanie CVE, ale ma to przede wszystkim na celu umożliwienie wewnętrznych procesów inżynieryjnych”.
Warto pamiętać, iż implementacje Windows SMB mają długą, brzydką historię swoich zabezpieczeń. Rozpoczynając od podatnego i nieużywanego już SMB v1 (WannaCry), a kończąc na SMBGhost, który otworzył komputery z systemem Windows 10 na ataki bez uwierzytelnienia.
Nie tylko osoby z zewnątrz martwią się o bezpieczeństwo ksmbd. Kees Cook, starszy programista zajmujący się bezpieczeństwem jądra Linuksa, napisał: „Niektóre z tych luk to dość fundamentalne adekwatności bezpieczeństwa systemu plików, których nie testowano pod tym kątem”. Podsumował: „Martwię się tutaj o jakość kodu i myślę, iż coś musi się zmienić w procesach recenzji i testowania”. Taka wypowiedź świadczy o tym, iż zawodzą wewnętrzne procedury testów bezpieczeństwa, które powinny być pierwszym etapem znajdowania i naprawiania takich właśnie błędów.
Aktualizacje z poprawkami są dostępne, ale sytuacja pokazuje, iż kod wymaga dokładniejszego przeglądu i zabezpieczenia, zanim wszyscy będziemy w stanie zaufać mu w pełni na produkcji. Rozsądnie byłoby na razie załatanie jądra i wstrzymanie się z jego używaniem na rzecz funkcjonalności Samba.