Odkryto informacje o podatności CVE-2023-6200 w stosie sieciowym jądra Linux, która w określonych okolicznościach pozwala atakującemu z lokalnej sieci na wykonanie swojego kodu poprzez wysłanie specjalnie sformatowanego pakietu ICMPv6 z wiadomością RA (Router Advertisement), przeznaczoną do ogłaszania informacji o routerze.
Podatność może być wykorzystywana tylko z lokalnej sieci i ujawnia się w systemach z włączoną obsługą IPv6 oraz aktywnym parametrem sysctl 'net.ipv6.conf..accept_ra' (można to sprawdzić za pomocą polecenia 'sysctl net.ipv6.conf| grep accept_ra'), który domyślnie jest wyłączony w RHEL i Ubuntu dla zewnętrznych interfejsów sieciowych, ale włączony dla interfejsu loopback, co umożliwia atak z tej samej maszyny.
Podatność spowodowana jest stanem wyścigu podczas przetwarzania przez zbieracz śmieci przestarzałych zapisów fib6_info, co może prowadzić do odwołania się do już zwolnionego obszaru pamięci (use-after-free). Po otrzymaniu pakietu ICMPv6 z wiadomością o ogłoszeniu routera (RA, Router Advertisement) stos sieciowy wywołuje funkcję ndisc_router_discovery(), która w przypadku, gdy w wiadomości RA znajdują się dane o czasie życia trasy, wywołuje funkcję fib6_set_expires() i wypełnia strukturę gc_link. Do oczyszczania przestarzałych zapisów stosuje się funkcję fib6_clean_expires(), która odłącza rekord w gc_link i czyści pamięć wykorzystywaną przez strukturę fib6_info. W tym momencie pamięć dla struktury fib6_info została już zwolniona, ale odniesienie do niej nadal znajduje się w strukturze gc_link.
Podatność ujawnia się od wersji 6.6 i została usunięta w wersjach 6.6.9 i 6.7. Status usunięcia podatności w dystrybucjach można ocenić na tych stronach: Debian, Ubuntu, SUSE, RHEL, Fedora, Arch Linux, Gentoo, Slackware. Wśród dystrybucji, które dostarczają pakiety z jądrem 6.6, można wymienić Arch Linux, Gentoo, Fedora, Slackware, OpenMandriva i Manjaro; w pozostałych dystrybucjach nie można wykluczyć wprowadzenia zmian z błędem do pakietów ze starszymi wersjami jądra (na przykład w Debianie wskazuje się na podatny pakiet z jądrem 6.5.13, podczas gdy problematyczna zmiana pojawiła się w wersji 6.6). Jako obejście ochrony można wyłączyć IPv6 lub przypisać wartość 0 parametrom 'net.ipv6.conf.*.accept_ra'.
Źródło: opennet.ru
