Luka w stosie IPv6 jądra Linuksa umożliwiająca zdalne wykonanie kodu

Ujawniono informację o luce CVE-2023-6200) w stosie sieciowym jądra Linuksa, która w pewnych okolicznościach umożliwia atakującemu z sieci lokalnej wykonanie jego kodu poprzez wysłanie specjalnie zaprojektowanego pakietu ICMPv6 z wiadomość RA (Router Advertisement), której celem jest rozgłaszanie informacji o routerze.

Lukę można wykorzystać wyłącznie z sieci lokalnej i pojawia się ona w systemach z włączoną obsługą protokołu IPv6 i aktywnym parametrem sysctl „net.ipv6.conf.<nazwa_interfejsu sieciowego>.accept_ra” (można sprawdzić za pomocą polecenia „sysctl net.ipv6.conf | grep Accept_ra”) , który jest domyślnie wyłączony w RHEL i Ubuntu dla zewnętrznych interfejsów sieciowych, ale włączony dla interfejsu pętli zwrotnej, który umożliwia atak z tego samego systemu.

Luka jest spowodowana wyścigiem, gdy moduł zbierający elementy bezużyteczne przetwarza nieaktualne rekordy fib6_info, co może prowadzić do dostępu do już zwolnionego obszaru pamięci (wykorzystanie po zwolnieniu). Po odebraniu pakietu ICMPv6 z komunikatem anonsującym router (RA, Router Advertisement) stos sieciowy wywołuje funkcję ndisc_router_discovery(), która jeśli komunikat RA zawiera informację o czasie życia trasy, wywołuje funkcję fib6_set_expires() i wypełnia gc_link Struktura. Aby wyczyścić przestarzałe wpisy, użyj funkcji fib6_clean_expires(), która odłącza wpis w gc_link i czyści pamięć używaną przez strukturę fib6_info. W tym przypadku następuje pewien moment, w którym pamięć dla struktury fib6_info została już zwolniona, ale łącze do niej nadal znajduje się w strukturze gc_link.

Luka pojawiała się począwszy od gałęzi 6.6 i została naprawiona w wersjach 6.6.9 i 6.7. Stan usunięcia luki w dystrybucjach można ocenić na stronach: Debian, Ubuntu, SUSE, RHEL, Fedora, Arch Linux, Gentoo, Slackware. Wśród dystrybucji dostarczających pakiety z jądrem 6.6 można wymienić Arch Linux, Gentoo, Fedora, Slackware, OpenMandriva i Manjaro; w innych dystrybucjach możliwe jest, że zmiana z błędem zostanie przeniesiona do pakietów ze starszymi gałęziami jądra (np. przykładowo w Debianie jest wzmianka, że ​​pakiet z jądrem 6.5.13 jest podatny na ataki, natomiast problematyczna zmiana pojawiła się w gałęzi 6.6). W ramach obejścia bezpieczeństwa można wyłączyć protokół IPv6 lub ustawić parametry „net.ipv0.conf.*.accept_ra” na 6.

Źródło: opennet.ru

Dodaj komentarz