Luka w PolKit umożliwiła uzyskanie dostępu do roota w większości dystrybucji Linuksa

Ostatnio Qualy's opublikował wiadomość, że zidentyfikował podatność (CVE-2021-4034) en składnik systemu polka (dawniej PolicyKit), który jest używany w dystrybucjach, aby umożliwić nieuprzywilejowanym użytkownikom wykonywanie czynności wymagających podwyższonych praw dostępu.

Słaby punkt umożliwia nieuprzywilejowanemu użytkownikowi lokalnemu podniesienie swoich uprawnień do użytkownika root i uzyskaj pełną kontrolę nad systemem. Problem nosi nazwę kodową PwnKit i jest znany z tworzenia działającego exploita, który działa w domyślnych ustawieniach w większości dystrybucji Linuksa.

Wspomina się, że problem występuje w narzędziu pkexec dołączonym do PolKit, który jest dostarczany z flagą root SUID i jest przeznaczony do wykonywania poleceń z uprawnieniami innych użytkowników zgodnie z regułami PolKit.

Z powodu niewłaściwej obsługi argumentacji z wiersza poleceń przekazanego do pkexec, a nieuprzywilejowany użytkownik może ominąć uwierzytelnianie i uruchomić kod jako root, niezależnie od ustalonych zasad dostępu. Do ataku, bez względu na ustawienia i ograniczenia ustawione w PolKit, wystarczy, że atrybut główny SUID dla pliku wykonywalnego jest ustawiony narzędziem pkexec.

Pkexec nie sprawdza poprawności liczby argumentów wiersza poleceń (argc) przekazanych podczas uruchamiania procesu. Twórcy pkexec założyli, że pierwszy wpis w tablicy argv zawsze zawiera nazwę procesu (pkexec), a drugi wpis to albo NULL, albo nazwa polecenia wykonanego przez pkexec.

Ponieważ liczba argumentów nie była porównywana z rzeczywistą zawartością tablicy i zakładano, że zawsze jest większa niż 1, jeśli pusta tablica argv została przekazana do procesu, na co pozwala funkcja execve Linuksa, pkexec traktował NULL jako pierwszy argument ( proces nazwa), a następna po wyczerpaniu pamięci buforowej, jako następna zawartość tablicy.

Problem polega na tym, że po tablicy argv w pamięci znajduje się tablica envp, która zawiera zmienne środowiskowe. Tak więc, przy pustej tablicy argv, pkexec wyodrębnia dane o poleceniu wykonywanym z podwyższonymi uprawnieniami z pierwszego elementu tablicy ze zmiennymi środowiskowymi (argv[1] stał się identyczny z envp[0]), których zawartość może być kontrolowana przez atakujący.

Po otrzymaniu wartości argv[1], pkexec próbuje określić pełną ścieżkę do pliku wykonywalnego przy użyciu ścieżek plików w PATH i zapisuje wskaźnik do łańcucha z pełną ścieżką z powrotem do argv[1], co prowadzi do nadpisania wartości również pierwszej zmiennej środowiskowej, ponieważ argv[1] jest identyczne z envp[0]. Manipulując nazwą pierwszej zmiennej środowiskowej, atakujący może podstawić inną zmienną środowiskową w pkexec, na przykład zastąpić zmienną środowiskową „LD_PRELOAD”, co nie jest dozwolone w programach suid, a proces załaduje swoją współdzieloną bibliotekę w procesie .

Działający exploit wykorzystuje podstawianie zmiennej GCONV_PATH, który jest używany do określenia ścieżki do biblioteki transkodowania symboli, która jest ładowana dynamicznie po wywołaniu funkcji g_printerr(), która używa w swoim kodzie iconv_open().

Przedefiniowując ścieżkę w GCONV_PATH, atakujący może załadować nie normalną bibliotekę iconv, ale własną bibliotekę, której sterowniki zostaną wykonane podczas komunikatu o błędzie na etapie, na którym pkexec nadal działa jako root i przed weryfikacją uprawnień startowych.

Zauważono, że chociaż problem wynika z uszkodzenia pamięci, można go niezawodnie i powtarzalnie wykorzystać, niezależnie od używanej architektury sprzętowej.

Exploit przygotowany pomyślnie przetestowany na Ubuntu, Debianie, Fedorze i CentOS, ale może być również używany w innych dystrybucjach. Oryginalny exploit nie jest jeszcze publicznie dostępny, co wskazuje, że jest trywialny i może być łatwo odtworzony przez innych badaczy, dlatego ważne jest, aby jak najszybciej zainstalować aktualizację poprawki w systemach z wieloma użytkownikami.

Polkit jest również dostępny dla systemów BSD i Solaris, ale nie został zbadany pod kątem eksploatacji. Wiadomo natomiast, że atak nie może być wykonany na OpenBSD, ponieważ jądro OpenBSD nie pozwala na przekazanie pustej wartości argc podczas wywoływania execve().

Problem istnieje od maja 2009, kiedy dodano polecenie pkexec. Poprawka na lukę w PolKit jest nadal dostępna jako łatka (wersja poprawki nie została stworzona), ale ponieważ twórcy dystrybucji zostali wcześniej powiadomieni o problemie, większość dystrybucji wydała aktualizację w tym samym czasie. informacji o luce w zabezpieczeniach.

W końcu jeśli chcesz dowiedzieć się więcej na ten temat, możesz sprawdzić szczegóły w poniższy link.


Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.