Bezpieczeństwo Linuksa stoi przed kolejnym wyzwaniem po odkryciu luki CVE-2026-31431, nazwanej przez badaczy Xint Code „Copy Fail”. Ten problem projektowy, daleki od teoretycznej wady, pozwala nieuprzywilejowanemu użytkownikowi lokalnemu na przewidywalne i dyskretne zwiększenie uprawnień i uzyskanie pełnego dostępu superużytkownika.
Badacze wspominają, że tę lukę udało się skutecznie wykorzystać w wiodących dystrybucjach, takich jak Ubuntu, Amazon Linux, RHEL i SUSE, co potwierdza, że każdy system z jądrem w wersji nowszej niż 4.14 i obsługą gniazd AF_ALG jest potencjalnie podatny na ten atak.
Operacje na miejscu i przepełnienie pamięci podręcznej stron
W odniesieniu do luki w zabezpieczeniach, wspomniano, że pochodzi ona z optymalizacji wprowadzonej w 2017 roku w kryptograficznym API jądra (AF_ALG). Modyfikacja ta miała na celu wyeliminowanie zbędnego buforowania poprzez wykonywanie uwierzytelnionych operacji szyfrowania (AEAD) bezpośrednio w tej samej przestrzeni pamięci, znanych jako operacje „w miejscu”.
Krytyczny problem pojawia się podczas łączenia tej optymalizacji z funkcją splice(), która przesyła dane między deskryptorami plików poprzez bezpośrednie odwołania do pamięci podręcznej stron jądra zamiast fizycznego kopiowania danych. Podczas żądania odszyfrowania struktura pamięci została skonfigurowana w taki sposób, że bufor docelowy, który powinien być przestrzenią tymczasową dla użytkownika, ostatecznie był bezpośrednio połączony ze stronami pamięci podręcznej zawierającymi dane plików systemowych.
Uwierzytelnianie i zapisywanie poza granicami pamięci
Główną przyczyną luki jest nietypowe zachowanie algorytmu uwierzytelniania. W przeciwieństwie do innych procedur kryptograficznych, które ściśle przestrzegają granic buforów docelowych, ten konkretny algorytm wykorzystuje pamięć użytkownika jako tymczasową przestrzeń roboczą (tzw. „scratch pad”) do reorganizacji sekwencji bajtów podczas obliczania znaczników uwierzytelniania.
W tym procesie algorytm zapisuje cztery bajty poza ustaloną granicą obszaru wyjściowego. Dzięki optymalizacji w miejscu i łańcuchowi referencji utworzonemu przez splice(), ten pozornie nieszkodliwy zapis przekracza granicę pamięci użytkownika i trafia bezpośrednio na stronę pamięci podręcznej jądra powiązaną z przetwarzanym plikiem.
Ten ciąg luk logicznych daje atakującemu możliwość dowolnego nadpisania czterech bajtów w określonych pozycjach w pamięci podręcznej stron dla dowolnego pliku, który może odczytać. Wysyłając serię obliczonych żądań, atakujący może wstrzyknąć złośliwy kod do wersji pamięci krytycznych plików wykonywalnych z ustawionym bitem suid, takich jak narzędzie do przełączania użytkowników.
Ponieważ wszystkie operacje odczytu najpierw odpytują pamięć podręczną stron, przy kolejnym wywołaniu legalnego narzędzia system wykona wstrzyknięty kod z pamięci, przyznając natychmiastowe uprawnienia roota bez konieczności modyfikowania fizycznego pliku na dysku twardym. Co bardziej niepokojące, ponieważ izolacja kontenera współdzieli pamięć podręczną stron hosta bazowego, luka ta stanowi bezpośrednią drogę ucieczki ze środowisk zwirtualizowanych, takich jak klastry Kubernetes, i naruszenia bezpieczeństwa węzła głównego.
Awaryjne poprawki i rozwiązania łagodzące
Biorąc pod uwagę powagę tej wady, zespoły konserwacyjne wdrożyły aktualizacje awaryjne, przy czym ostatecznym rozwiązaniem jest przywrócenie optymalizacji w pliku algif_aead.c, która polega na ścisłym oddzieleniu list pamięci źródłowej i docelowej, aby zapobiec umieszczaniu stron pamięci podręcznej w ścieżkach umożliwiających zapis.
Te poprawki zostały już zintegrowane z kernelami 6.18.22, 6.19.12 i 7.0 i są obecnie przenoszone do gałęzi długoterminowego wsparcia. Administratorom, którzy nie mogą natychmiast zrestartować ani zaktualizować swoich serwerów, zaleca się wyłączenie modułu jądra algif_aead, jeśli został on skompilowany zewnętrznie, lub znaczne ograniczenie tworzenia gniazd AF_ALG za pomocą polityk bezpieczeństwa, takich jak SELinux – tarczy, która na przykład chroni obecne urządzenia z systemem Android przed tym zagrożeniem.
Jeśli chcesz dowiedzieć się więcej, szczegóły znajdziesz pod poniższym linkiem.