Vulnerability in the io_uring subsystem that allows obtaining root privileges.

W interfejsie asynchronicznego wejścia/wyjścia io_uring, dostarczanym przez jądro Linux, wykryto lukę (CVE-2024-0582), która pozwala na uzyskanie praw root przez nieuprzywilejowanego użytkownika w systemie. Do wykorzystania luki wystarczy standardowy dostęp lokalny do systemu, bez potrzeby manipulacji przestrzeniami nazw. Obecnie publicznie dostępny jest działający exploit oraz dokładny opis drugiej techniki wykorzystania luki.

Luka wynika z odwołania do już zwolnionego bloku pamięci (use-after-free) w podsieci io_uring, która występuje podczas rejestracji i zwalniania pierścieniowego bufora utworzonego z flagą IORING_REGISTER_PBUF_RING. W przypadku zastosowania operacji mmap() na buforze, pozostaje on odzwierciedlony w przestrzeni użytkownika po wykonaniu operacji jego zwolnienia (IORING_UNREGISTER_PBUF_RING). Wykorzystując tę cechę, atakujący może odczytywać i zapisywać dane w stronach pamięci zwracanych przez system rozdzielania pamięci jądra.

Problem pojawia się od wydania jądra Linux 6.4 i został usunięty w wydaniach 6.7 i 6.6.5, a także w pakiecie z jądrami 6.5.0-21, przygotowanym dla Ubuntu 22.04 i 23.10. Co ciekawe, w głównym jądrze problem został naprawiony w grudniu 2023 roku, projekt Google Zero otworzył dostęp do sygnalizującego istnienie luki komunikatu o błędzie 8 stycznia, a pakiet z poprawionym jądrem 6.5 dla Ubuntu został utworzony dopiero 22 lutego 2024 roku. W innych dystrybucjach śledzenie poprawek i podatności na lukę można znaleźć na stronach: Debian, Gentoo, RHEL, SUSE, Fedora, Arch.

Pierwszy exploit manipuluje tworzeniem dużej liczby kontrolowanych przez atakującego stron pamięci w celu określenia układu pamięci w jądrze i dostępu do sąsiednich fizycznych stron pamięci, wykorzystując jako sygnały zawartość w określony sposób wypełnionych struktur gniazd sieciowych. Do uruchamiania kodu w exploicie używany jest "gadget" (sekwencja istniejących w jądrze instrukcji), który prowadzi do wykonania funkcji call_usermodehelper_exec, przeznaczonej do uruchamiania procesów w przestrzeni użytkownika z jądra.

Drugi exploit opiera się na tym, że gdy wszystkie slab-bloki w pamięci podręcznej są wyczerpane (na przykład przy wielokrotnym otwieraniu pliku), wolne strony pamięci, do których dostęp ma atakujący, są wykorzystywane przez system alokacji pamięci do stworzenia nowego slab-bloku, a wszystkie nowe struktury plików zaczynają być umieszczane w tym bloku. W związku z tym niektóre struktury plików trafią na strony pamięci, które może odczytywać i zapisywać atakujący. Wykorzystanie tego krytycznego błędu sprowadza się do zorganizowania dostępu do odpowiedniego pliku w pamięci podręcznej oraz zamiany w związanych z nim strukturach plików pola f_mode, które określa prawa dostępu, co pozwala na udostępnienie do zapisu pożądanego pliku systemowego, na przykład /etc/passwd.

Ź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