Luki w jądrze Linux umożliwiające podniesienie swoich uprawnień przez nf_tables i ksmbd.

W Netfilter, podsystemie jądra Linux używanym do filtrowania i modyfikowania pakietów sieciowych, zidentyfikowano lukę (CVE-2024-1086), która umożliwia lokalnemu użytkownikowi wykonanie kodu w trybie jądra oraz podniesienie swoich uprawnień w systemie. Problem wynika z podwójnego zwolnienia pamięci (double-free) w module nf_tables, który obsługuje filtrację pakietów nftables. Badacz zajmujący się bezpieczeństwem odkrył lukę i opracował oraz opublikował działający prototyp eksploita.

Działanie eksploita zostało zademonstrowane w aktualnych wersjach Debiana i Ubuntu z jądrami Linux 5.14 — 6.6, a także w środowisku z jądrem KernelCTF (Capture the Flag), które zawiera dodatkowe poprawki blokujące typowe metody działania eksploita i jest używane przez firmę Google w programie wypłaty nagród za znajdowanie luk. Skuteczność działania eksploita oceniana jest na 99,4%. W towarzyszącym artykule dokładnie opisano proces tworzenia złożonego wielowarstwowego eksploita oraz omijania obecnych w jądrze mechanizmów ochrony i przeciwdziałania działaniu eksploita.

Luki w jądrze Linux umożliwiające podniesienie swoich uprawnień przez nf_tables i ksmbd.

Problem dotyczy błędu w funkcji nft_verdict_init(), która pozwala na używanie dodatnich wartości jako kodu błędu odrzucenia pakietów (DROP) w hookach, co może być wykorzystane do wywołania w funkcji nf_hook_slow() ponownej operacji zwolnienia pamięci dla bufora, dla którego już wywołano funkcję free(). Problem występuje, gdy operacja NF_DROP jest formułowana z błędem, a jądro początkowo interpretuje NF_DROP, ale następnie zwalnia bufor i zwraca status NF_ACCEPT. Ta sytuacja prowadzi do tego, że mimo zwolnienia powiązanego z pakietem bufora, jego przetwarzanie nie ustaje, a pakiet jest przekazywany do innego handlera, który z kolei po raz drugi wywołuje funkcję zwolnienia pamięci.

Luka występuje od wersji jądra Linux 3.15, ale exploity działają z jądrami od wersji 5.14. Naprawa luki została zaproponowana w wydaniu jądra Linux 6.8-rc1 i pod koniec lutego została przeniesiona do stabilnych gałęzi 5.15.149, 6.1.76 i 6.6.15. W dystrybucjach można śledzić naprawę luki na stronach: Debian, Ubuntu, Gentoo, RHEL, SUSE, Fedora, Arch.

Dodatkowo warto zauważyć serię luk w module ksmbd, oferującym wbudowaną w jądro Linux implementację protokołu plikowego. serwera Na podstawie protokołu SMB: U vulnerability CVE-2024-26592 pozwala zdalnie, bez konieczności autoryzacji, na wykonanie własnego kodu z uprawnieniami jądra na systemach z aktywowanym modułem ksmbd. Problem spowodowany jest stanem wyścigu w kodzie obsługi połączeń TCP, który wynika z braku odpowiednich blokad podczas pracy z obiektem.

U vulnerability CVE-2023-52440 również umożliwia zdalne wykonanie własnego kodu z uprawnieniami jądra, ale jest spowodowana przepełnieniem bufora podczas obsługi niepoprawnych kluczy sesyjnych z powodu braku odpowiedniej weryfikacji rozmiaru danych otrzymanych od użytkownika przed ich skopiowaniem do bufora o stałym rozmiarze.

U vulnerability (1, 2, 3) CVE-2024-26594, CVE-2023-52442 oraz CVE-2023-52441 w ksmbd umożliwiają zdalne, bez konieczności autoryzacji, określenie zawartości pamięci jądra. U vulnerability CVE-2024-26594 spowodowane jest niepoprawną weryfikacją danych podczas obsługi przychodzących tokenów SMB2 Mech, co prowadzi do zwracania danych z obszaru poza buforem. U vulnerability CVE-2023-52442 spowodowana jest brakiem odpowiedniej weryfikacji danych wejściowych podczas przetwarzania powiązanych łańcuchowo (chained) zapytań. U vulnerability CVE-2023-52441 spowodowana jest brakiem niezbędnej weryfikacji danych wejściowych podczas przetwarzania zapytań dotyczących negocjacji połączenia SMB2.

U vulnerability CVE-2024-26594 oraz CVE-2024-26592 zostały usunięte w jądrze 6.8 oraz w poprawkach aktualizacyjnych wcześniejszych stabilnych gałęzi 6.1.75, 6.6.14, 6.7.2. Pozostałe luki bezpieczeństwa zostały rozwiązane w jądrze 6.5 oraz w aktualizacjach 5.15.145, 6.1.53, 6.4.16.

Na koniec warto wspomnieć o aktywacji nowego zespołu programistów jądra Linux, powołanego do analizy obecności luk w zabezpieczeniach oraz oceny związku wprowadzanych poprawek w jądrze z problemami bezpieczeństwa. W lutym programiści jądra utworzyli własną usługę CNA (CVE Numbering Authority), która otrzymała uprawnienia do samodzielnego przypisywania identyfikatorów CVE lukom. Do tego momentu przypisywanie CVE i analiza związku poprawek z potencjalnymi lukami spoczywały na barkach programistów dystrybucji, a w jądrze potencjalne luki nie były wyróżniane i funkcjonowały na równi z normalnymi poprawkami. Wyniki pracy nowej usługi przerosły wszelkie oczekiwania — codziennie w jądrze oznacza się do kilkudziesięciu nowych luk, które wcześniej nie były oznaczane jako problemy z bezpieczeństwem. Na przykład, 26 marca nowe identyfikatory CVE przypisano 14 lukom, które wcześniej nie były brane pod uwagę jako problemy z bezpieczeństwem, a 25 marca — 41 lukom.

Ź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