Zdalna luka w jądrze Linuksa występująca podczas korzystania z protokołu TIPC

W module jądra Linuksa zidentyfikowano lukę (CVE-2022-0435), która zapewnia działanie protokołu sieciowego TIPC (Transparent Inter-process Communication), potencjalnie umożliwiając wykonanie kodu na poziomie jądra poprzez przesłanie specjalnie zaprojektowanej sieci paczka. Problem dotyczy tylko systemów z załadowanym modułem jądra tipc.ko i skonfigurowanym stosem TIPC, który jest zwykle używany w klastrach i nie jest domyślnie włączony w niewyspecjalizowanych dystrybucjach Linuksa.

Należy zauważyć, że podczas budowania jądra w trybie „CONFIG_FORTIFY_SRC=y” (używanym w RHEL), który dodaje dodatkowe sprawdzanie granic do funkcji memcpy(), działanie ogranicza się do zatrzymania awaryjnego (jądro wpada w panikę). Jeśli zostanie wykonany bez dodatkowych kontroli i wycieknie informacja o znacznikach canary używanych do ochrony stosu, problem można wykorzystać do zdalnego wykonania kodu z uprawnieniami jądra. Badacze, którzy zidentyfikowali problem, twierdzą, że technika wykorzystania jest banalna i zostanie ujawniona po powszechnym wyeliminowaniu podatności w dystrybucjach.

Luka jest spowodowana przepełnieniem stosu występującym podczas przetwarzania pakietów, którego wartość pola z liczbą węzłów członkowskich domeny przekracza 64. Aby przechowywać parametry węzła w module tipc.ko, stosuje się stałą tablicę „u32 Members[64 ]”, ale w procesie przetwarzania określonego w pakiecie numer węzła nie sprawdza wartości „member_cnt”, co pozwala na użycie wartości większych niż 64 do kontrolowanego nadpisywania danych w obszarze pamięci dalej do struktury „dom_bef” na stosie.

Błąd powodujący lukę został wprowadzony 15 czerwca 2016 roku i został zawarty w jądrze Linuksa 4.8. Lukę usunięto w wersjach jądra Linuksa 5.16.9, 5.15.23, 5.10.100, 5.4.179, 4.19.229, 4.14.266 i 4.9.301. W jądrach większości dystrybucji problem pozostaje nierozwiązany: RHEL, Debian, Ubuntu, SUSE, Fedora, Gentoo, Arch Linux.

Protokół TIPC został pierwotnie opracowany przez firmę Ericsson i przeznaczony do organizowania komunikacji między procesami w klastrze i jest aktywowany głównie w węzłach klastra. TIPC może działać poprzez Ethernet lub UDP (port sieciowy 6118). Podczas pracy po Ethernecie atak można przeprowadzić z sieci lokalnej, a przy wykorzystaniu protokołu UDP z sieci globalnej, jeśli port nie jest objęty zaporą ogniową. Atak może zostać przeprowadzony także przez nieuprzywilejowanego lokalnego użytkownika hosta. Aby aktywować TIPC, musisz pobrać moduł jądra tipc.ko i skonfigurować powiązanie z interfejsem sieciowym za pomocą netlink lub narzędzia tipc.

Źródło: opennet.ru

Dodaj komentarz