Firma Anthropic ujawnila informacje o krytycznej luce bezpieczeństwa (CVE-2026-98432) w stosie TCP jądra Linux, która umożliwia zdalne wykonanie kodu poprzez wysyłanie specjalnie przygotowanych pakietów. Zgłoszono stworzenie działającego exploit, który umożliwia wykonanie kodu na poziomie jądra i zdalne uzyskanie uprawnień root w systemie. Przygotowany exploit nadaje się do ataku na systemy z procesami serwerowymi, które akceptują połączenia przez gniazda sieciowe wspierające protokół MPTCP (Multipath TCP). Wsparcie MPTCP może być aktywowane w przypisaniu do wybranych gniazd sieciowych, co jest domyślnie włączone w standardowej bibliotece języka Go, począwszy od wersji Go 1.24 (luty 2025 roku).
Przygotowany exploit może być stosowany w przypadku dowolnych aplikacji serwerowych napisanych w języku Go, w tym serwera HTTP Caddy, przy założeniu, że możliwe jest wysyłanie pakietów sieciowych do stworzonego przez nie gniazda nasłuchującego. Ponieważ luka występuje bezpośrednio w stosie IPv4 i nie jest specyficzna dla MPTCP, nie można wykluczyć stworzenia exploitów działających bez powiązania z MPTCP, jednak dotychczas takie exploity nie zostały zaprezentowane. Na przykład możliwa jest eksploatacja luki w przypadku przetwarzania żądań migracji gniazd, dostępnych w konfiguracjach z parametrem net.ipv4.tcp_migrate_req=1 lub przy użyciu programów eBPF z opcją BPF_SK_REUSEPORT_SELECT_OR_MIGRATE.
Luka ta jest spowodowana stanem wyścigu, który występuje podczas jednoczesnego przetwarzania ponownie przesyłanych zapytań SYN podczas ustanawiania połączenia TCP. Ponieważ funkcja tcp_v4_syn_recv_sock() przekazuje parametry do gniazda potomnego z struktury ireq->ireq_opt przez odniesienie, a nie przez kopiowanie, w określonych okolicznościach powstaje sytuacja, w której pamięć zajmowana przez struktury inet_opt i ireq_opt z parametrami gniazda została już zwolniona, ale związane z nimi opcje gniazda są nadal używane (use-after-free).
Zdalne eksploatacje odbywają się poprzez wysyłanie serii zsynchronizowanych czasowo zapytań sieciowych. Stworzony exploit jest skuteczny również w jądrach, w których stosuje się randomizację adresów (KASLR), jednak trafienie w okno stanu wyścigu zajmuje sporo czasu i wymaga wielu prób. Ułatwieniem w eksploatacji jest to, że nietrafienie w okno stanu wyścigu prowadzi jedynie do zresetowania sesji nawiązywania połączenia (handshake), a nie do awarii jądra, co pozwala na nieskończone kontynuowanie prób. W stworzonym prototypie exploita, przeprowadzenie ataku zajęło około godziny – 48 minut na ustalenie rozmieszczenia pamięci oraz kolejne 5 minut na zorganizowanie wykonania kodu.
Gwarantowane obejścia tej luki w zabezpieczeniach nie zostały jeszcze przedstawione – jako jedyna niezawodna opcja sugeruje się zainstalowanie aktualizacji jądra. Problem pojawia się zaczynając od jądra Linux 4.4 i został rozwiązany w wydaniach 5.10.272, 5.15.223, 6.1.190, 6.6.159, 6.12.113, 6.18.56, 7.2.10 oraz 7.3. Status naprawy luk zabezpieczeń w dystrybucjach można ocenić na tych stronach: Debian, Ubuntu, SUSE/openSUSE, RHEL, Gentoo, Arch,
Fedora.
Wśród zalecanych działań mających na celu przeciwdziałanie konkretnym metodom eksploatacji, które nie blokują luki w ogólnym zakresie, można wymienić wyłączenie wsparcia dla MPTCP oraz ustawienie parametru sysctl jądra net.ipv4.tcp_migrate_req na wartość 0:
sysctl -w net.mptcp.enabled=0
sysctl -w net.ipv4.tcp_migrate_req=0
Aby określić obecność w systemie procesów wykorzystujących gniazda z
MPTCP, można użyć poleceń:
ip mptcp endpoint show
ip mptcp limits show
Aby wyłączyć wsparcie dla MPTCP w programach napisanych w języku Go, należy użyć flagi „multipathtcp=0”, co można ustawić poprzez zmienną środowiskową „GODEBUG=multipathtcp=0”. Aby wyłączyć wsparcie dla MPTCP na etapie kompilacji, można dodać „godebug multipathtcp=0” do pliku z modułem go.mod. W kodzie aplikacji można wyłączyć użycie MPTCP za pomocą funkcji net.Dialer.SetMultipathTCP oraz net.ListenConfig.SetMultipathTCP.
Poza rozważanym problemem firma Anthropic ogłosiła również szereg lokalnych luk w systemach Linux, OpenBSD i FreeBSD, które umożliwiają uzyskanie uprawnień root w systemie oraz wyjście z izolowanych kontenerów; luki w Chrome i Safari, prowadzące do wykonania kodu w systemie po otwarciu specjalnie przygotowanych stron internetowych; luka w jądrze Windows, prowadząca do awaryjnego zakończenia pracy; luka w platformie Android, która pozwala na ominięcie blokady ekranu i uzyskanie dostępu do informacji osobistych i zdjęć bez odblokowywania urządzenia (atak zademonstrowano na smartfonie Google Pixel 9).
Uzupełnienie:
- W nginx możliwość aktywacji opcji IPPROTO_MPTCP dla nasłuchującego gniazda sieciowego jest dostępna począwszy od wersji 1.29.7, ale nie jest stosowana domyślnie.
- W Lighttpd opcja włączenia MPTCP jest dostępna począwszy od wydania 1.4.76.
- W Apache httpd poprawki dla wsparcia MPTCP zostały dodane do gałęzi Apache httpd 2.5-HEAD w 2024 roku.
- W systemd wsparcie dla aktywacji MPTCP przy włączaniu przez gniazdo dodano w wersji 257.
- W Apache Traffic Server opcja włączenia MPTCP jest wspierana począwszy od wersji 9.2.4.
- W HAProxy od wersji 3.1.0 dostępna jest opcja „mptcp{,4,6}@”.
- W Traefik ustawienie flagi IPPROTO_MPTCP jest włączone domyślnie począwszy od wydań 2.11.26, 3.4.2 i v3.5.0-rc1.
- W bazie danych Valkey począwszy od wersji 9.0.0 dostępna jest opcja „—mptcp” oraz ustawienia „mptcp yes” i „repl-mptcp yes”.
Źródło: opennet.ru
