Luka w systemd-coredump, która pozwala określić zawartość pamięci programów suid

W komponencie systemd-coredump, który przetwarza podstawowe pliki wygenerowane po awarii procesów, wykryto lukę (CVE-2022-4415), umożliwiając nieuprzywilejowanemu użytkownikowi lokalnemu określenie zawartości pamięci uprzywilejowanych procesów uruchomionych z flagą root suid. Problem z domyślną konfiguracją został potwierdzony w dystrybucjach openSUSE, Arch, Debian, Fedora i SLES.

Podatność spowodowana jest brakiem poprawnego przetworzenia parametru sysctl fs.suid_dumpable w programie systemd-coredump, który przy domyślnej wartości 2 umożliwia generowanie zrzutów pamięci dla procesów z flagą suid. Rozumie się, że podstawowe pliki procesów suid napisane przez jądro muszą mieć ustawione prawa dostępu umożliwiające odczyt tylko użytkownikowi root. Narzędzie systemd-coredump, wywoływane przez jądro w celu zapisania plików rdzenia, przechowuje plik rdzenia pod identyfikatorem root, ale dodatkowo zapewnia dostęp do odczytu plików rdzenia w oparciu o listę ACL w oparciu o identyfikator właściciela, który pierwotnie uruchomił proces .

Ta funkcja umożliwia pobranie podstawowych plików bez względu na to, że program może zmienić identyfikator użytkownika i działać z podwyższonymi uprawnieniami. Atak polega na tym, że użytkownik może uruchomić aplikację suid i wysłać do niej sygnał SIGSEGV, a następnie załadować zawartość pliku rdzenia, który zawiera wycinek pamięci procesu podczas nieprawidłowego zakończenia.

Na przykład użytkownik może uruchomić „/usr/bin/su” i w innym terminalu zakończyć jego wykonanie poleceniem „kill -s SIGSEGV `pidof su`”, po czym systemd-coredump zapisze plik rdzenia w katalogu /var /lib/systemd/ katalog coredump, ustawiając dla niego listę ACL, która umożliwia odczyt przez bieżącego użytkownika. Ponieważ narzędzie suid „su” wczytuje zawartość pliku /etc/shadow do pamięci, osoba atakująca może uzyskać dostęp do informacji o skrótach haseł wszystkich użytkowników w systemie. Narzędzie sudo nie jest podatne na ataki, ponieważ zabrania generowania plików podstawowych za pośrednictwem ulimit.

Według twórców systemd luka pojawia się począwszy od wersji systemd 247 (listopad 2020), ale według badacza, który zidentyfikował problem, dotyczy to również wersji 246. Luka pojawia się, jeśli systemd jest skompilowany z biblioteką libacl (domyślnie w wszystkie popularne dystrybucje). Poprawka jest obecnie dostępna w formie łatki. Poprawki w dystrybucjach możesz śledzić na stronach: Debian, Ubuntu, Gentoo, RHEL, SUSE, Fedora, Gentoo, Arch. W ramach obejścia bezpieczeństwa można ustawić sysctl fs.suid_dumpable na 0, co wyłącza wysyłanie zrzutów do procedury obsługi systemd-coredump.

Źródło: opennet.ru

Dodaj komentarz