W module ksmbd, który zawiera wbudowaną w jądro Linux implementację serwera plików opartą na protokole SMB, wykryto krytyczną lukę, która umożliwia zdalne wykonanie własnego kodu z prawami jądra. Atak można przeprowadzić bez uwierzytelnienia, wystarczy, aby moduł ksmbd był aktywowany w systemie. Problem ten pojawia się od wersji jądra 5.15, wydanej w listopadzie 2021 roku, a bez zbędnej reklamy został usunięty w aktualizacjach 5.15.61, 5.18.18 i 5.19.2, które zostały opracowane w sierpniu 2022 roku. Ponieważ identyfikator CVE nie został jeszcze przypisany do tej luki, nie ma dokładnych informacji na temat jej usunięcia w dystrybucjach.
Szczegóły na temat eksploatacji luki nie zostały jeszcze ujawnione, wiadomo tylko, że jest ona spowodowana dostępem do już zwolnionej przestrzeni pamięci (Use-After-Free) z powodu braku weryfikacji istnienia obiektu przed wykonaniem na nim operacji. Problem polega na tym, że w funkcji smb2_tree_disconnect() zwolniono pamięć przydzieloną dla struktury ksmbd_tree_connect, ale po tym pozostał wskaźnik używany przy przetwarzaniu niektórych zewnętrznych żądań, które zawierały polecenia SMB2_TREE_DISCONNECT.
Oprócz wspomnianej luki w ksmbd naprawiono również 4 mniej groźne problemy:
- ZDI-22-1688 — zdalne wykonanie kodu z prawami jądra z powodu braku w kodzie obsługi atrybutów plików weryfikacji faktycznego rozmiaru zewnętrznych danych przed skopiowaniem ich do przydzielonego bufora. Niebezpieczeństwo luki zmniejsza to, że atak można przeprowadzić tylko przez uwierzytelnionego użytkownika.
- ZDI-22-1691 — zdalny wyciek informacji z pamięci jądra z powodu nieprawidłowej weryfikacji parametrów wejściowych w obrocie komendy SMB2_WRITE (atak można przeprowadzić tylko przez uwierzytelnionego użytkownika).
- ZDI-22-1687 — zdalne wywołanie odmowy usługi poprzez wyczerpanie dostępnej pamięci w systemie z powodu nieprawidłowego zwalniania zasobów w obrocie komendy SMB2_NEGOTIATE (atak można przeprowadzić bez uwierzytelnienia).
- ZDI-22-1689 — zdalne wywołanie awarii jądra z powodu braku odpowiedniej weryfikacji parametrów komendy SMB2_TREE_CONNECT, prowadzącej do odczytu z obszaru poza buforem (atak można przeprowadzić tylko przez uwierzytelnionego użytkownika).
Wsparcie dla działania serwera SMB za pomocą modułu ksmbd jest dostępne w pakiecie Samba od wersji 4.16.0. W przeciwieństwie do serwera SMB działającego w przestrzeni użytkownika, ksmbd jest bardziej wydajny pod względem wydajności, zużycia pamięci oraz integracji z zaawansowanymi możliwościami jądra. Ksmbd jest przedstawiane jako wysoce wydajne rozszerzenie Samba, gotowe do zastosowania na urządzeniach wbudowanych, które w razie potrzeby można zintegrować z narzędziami i bibliotekami Samba. Autorami kodu ksmbd są Namjae Jeon z firmy Samsung oraz Hyunchul Lee z LG, a nadzór nad jądrem sprawuje Steve French z firmy Microsoft, który jest maintainerem podsystemu CIFS/SMB2/SMB3 w jądrze Linux oraz długoletnim uczestnikiem zespołu deweloperów Samba, który wniósł znaczący wkład w implementację wsparcia dla protokołów SMB/CIFS w Samba i Linux.
Źródło: opennet.ru
