Podatności Dirty Frag, zmieniające pamięć stron w celu uzyskania dostępu root we wszelkich dystrybucjach Linuxa

W jądrze Linuksa zidentyfikowano dwie luki, które są zasadniczo analogiczne do luki Copy Fail ujawnionej kilka dni temu, ale manifestujące się w innych podsystemach — xfrm-ESP i RxRPC. Serii luk nadano kodową nazwę Dirty Frag (spotyka się również wzmiankę o Copy Fail 2). Luki pozwalają nieuprzywilejowanemu użytkownikowi uzyskać uprawnienia root, nadpisując dane procesu w podręcznej pamięci stron. Istnieje exploit działający na wszystkich aktualnych dystrybucjach Linuksa. Informacje o luce zostały ujawnione przed publikacją poprawek, ale istnieje obejście, które blokuje problem.

Dirty Frag obejmuje dwie różne luki: pierwsza w module xfrm-ESP, używanym do przyspieszania operacji szyfrowania w IPsec przy użyciu protokołu ESP (Encapsulating Security Payload), a druga w sterowniku RxRPC, implementującym rodzinę gniazd AF_RXRPC oraz ten sam protokół RPC działający na UDP. Każda z luk osobno umożliwia uzyskanie uprawnień root. Luka w xfrm-ESP istnieje w jądrze Linuksa od stycznia 2017 roku, a luka w RxRPC od czerwca 2023 roku. Obie problemy spowodowane są optymalizacjami, które zezwalają na bezpośrednie zapisanie do pamięci podręcznej stron.

Aby wykorzystać lukę w xfrm-ESP, użytkownik musi mieć uprawnienia do tworzenia przestrzeni nazw, a aby wykorzystać lukę w RxRPC, musi mieć możliwość załadowania modułu jądra rxrpc.ko. Na przykład, w Ubuntu zasady AppArmor zakazują nieuprzywilejowanemu użytkownikowi tworzenia przestrzeni nazw, ale domyślnie moduł rxrpc.ko jest ładowany. W niektórych dystrybucjach nie ma modułu rxrpc.ko, ale nie blokuje on tworzenia przestrzeni nazw. Badacz, który zidentyfikował problem, przygotował kombinowany exploit, który może zaatakować system przez obie luki, co umożliwia wykorzystanie problemu we wszystkich głównych dystrybucjach. Działanie exploita potwierdzono w Ubuntu 24.04.4 z jądrem 6.17.0-23, RHEL 10.1 z jądrem 6.12.0-124.49.1, openSUSE Tumbleweed z jądrem 7.0.2-1, CentOS Stream 10 z jądrem 6.12.0-224, AlmaLinux 10 z jądrem 6.12.0-124.52.3 oraz Fedora 44 z jądrem 6.19.14-300.

Podobnie jak w przypadku luki Copy Fail, problemy w xfrm-ESP i RxRPC są wynikiem wykonywania deszyfrowania danych na miejscu z użyciem funkcji splice(), która przekazuje dane między deskryptorami plików a kanałami (pipe) bez kopiowania, poprzez przesyłanie referencji do elementów w pamięci podręcznej strony. Offsety dla operacji zapisu były obliczane bez odpowiednich kontroli, które uwzględniałyby użycie bezpośrednich referencji do elementów w pamięci podręcznej strony, co pozwalało na nadpisanie 4 bajtów w wybranym przesunięciu poprzez wysyłanie specjalnie sformatowanych zapytań i modyfikację zawartości dowolnego pliku w pamięci podręcznej strony.

Wszystkie operacje odczytu z plików najpierw zwracają zawartość z pamięci podręcznej strony. W przypadku modyfikacji danych w pamięci podręcznej strony operacje odczytu z pliku prowadzą do zwrócenia nie rzeczywiście przechowywanych na nośniku informacji, a podmienionych danych. Wykorzystanie luki polega na zmianie pamięci podręcznej strony dla wykonywalnego pliku z flagą suid root. Na przykład, aby uzyskać uprawnienia root, można odczytać wykonywalny plik /usr/bin/su, aby umieścić go w pamięci podręcznej strony, a następnie wprowadzić własny kod w załadowanej do pamięci podręcznej zawartości tego pliku. Następne uruchomienie narzędzia 'su' spowoduje, że do pamięci zostanie załadowana nie oryginalna wersja wykonywalnego pliku z nośnika, ale zmodyfikowana kopia z pamięci podręcznej strony.

Ujawienie informacji o lukach i skoordynowane wydanie aktualizacji z rozwiązaniem problemu było zaplanowane na 12 maja, ale z powodu wycieku informacji szczegóły dotyczące luki zostały opublikowane przed publikacją poprawek. Pod koniec kwietnia w publicznej liście mailingowej netdev opublikowano łatki do rxrpc, ipsec i xfrm, bez wzmianki, że są związane z usunięciem luki. 5 maja opiekun subsystemu IPsec zaakceptował w repozytorium git netdev zmianę z proponowaną poprawką w module xfrm-esp, której opis w dużej mierze powtarzał opis problemu, który doprowadził do luki Copy Fail w module algif_aead. Jeden z badaczy bezpieczeństwa zainteresował się tą poprawką, zdołał stworzyć działający exploit i opublikował go, nie wiedząc, że ujawnienie informacji na temat problemu do 12 maja było objęte embargo.

Aktualizacje z poprawkami dla jądra Linux oraz pakietów jądra w dystrybucjach nie zostały jeszcze opublikowane, ale dostępne są poprawki rozwiązujące problemy – xfrm-esp i rxrpc. Identyfikatory CVE nie zostały przypisane, co utrudnia śledzenie aktualizacji pakietów w dystrybucjach. Jako tymczasowe zabezpieczenie można zablokować ładowanie modułów jądra esp4, esp6 i rxrpc: sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf; rmmod esp4 esp6 rxrpc 2>/dev/null; true"

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster