Błędy znalezione po 10 latach. Podatności w narzędziu needrestart
Zespół amerykańskiej firmy Qualys zajmującej się cyberbezpieczeństwem odnalazł aż 5 podatności w paczce needrestart i powiązanym module ScanDeos.
18.12.2024 13:14
Jest to narzędzie kompatybilne z menedżerem pakietów apt, a więc znajduje zastosowanie w systemach Debian/Ubuntu i pokrewnych. Służy do wyszukiwania usług (w systemach Linux określanych tradycyjnie jako daemon) wymagających restartu. Taka sytuacja ma miejsce szczególnie po przeprowadzeniu aktualizacji lub instalacji pakietów, która to zmodyfikowała współdzielone biblioteki używane przez dany serwis. Działanie needrestart widać na poniższym zrzucie ekranu:
Podatności needrestart
needrestart domyślnie instalowany jest w Ubuntu od wersji 21.04. Znalezione podatności są dość poważne, ponieważ w łatwy sposób umożliwiają podniesienie uprawnień (LPE, Local Privilege Escalation), co jest niebezpieczne zwłaszcza w kontekście zdalnego i nieograniczonego (poprzez VPN czy listę dozwolonych adresów źródłowych) dostępu do serwerów.
Zakładając pomyślne użycie podatności, użytkownik standardowy (np. powiązany z kontem hostingowym) mógłby wykonać dowolne polecenie na prawach użytkownika root. Zalecana jest więc aktualizacja przynajmniej dwóch pakietów: needrestart i libmodule-scandeps-perl. O powadze zagrożenia świadczy również wyświetlany w Ubuntu komunikat:
Zespół z Qualys na początku znalazł trzy podatności (CVE-2024-48990, CVE-2024-48991, CVE-2024-10224), ale w wyniku ich głębszej analizy okazało się, że są kolejne — CVE-2024-48992 i CVE-2024-11003. Najprostsze do wykorzystania są CVE-2024-48990 i CVE-2024-48992. Polegają one na ustawieniu zmiennych środowiskowych odpowiednio PYTHONPATH lub RUBYLIB wskazujących na katalog kontrolowany przez atakującego (chociażby na poziomie katalogu domowego), który zawiera skrypt odpowiedzialny za wykonanie polecenia jako root.
Dalsza część artykułu pod materiałem wideo
Możliwe, że wkrótce w Metasploit będzie gotowy exploit (https://github.com/rapid7/metasploit-framework/pull/19676), ale już teraz można znaleźć proste działające przykłady wykorzystania podatności CVE-2024-48990. Jak widać poniżej, użytkownik mgiza nie ma żadnych uprawnień sudo, natomiast po uruchomieniu skryptu setup.py otrzymał dostęp do powłoki bash jako użytkownik root — skrypt zwyczajnie oczekiwał na działanie needrestart, a następnie uruchomił powłokę Bash.
Podatności związane są z dodaniem jednej z kluczowych funkcjonalności needrestart, opisanej w README projektu na GitHub:
Ponad 10 lat
Wersja 0.8 została opublikowana 27 kwietnia 2014 roku, co oznacza, że opisane błędy istniały w needrestart od ponad dziesięciu lat. Można sprawdzić, jakie konkretnie zmiany wprowadzili w kodzie Perl twórcy tego narzędzia w celu wyeliminowania podatności.
Oprócz aktualizacji oprogramowania istotne jest szeroko rozumiane ograniczenie dostępu do serwerów. Jeśli nie ma możliwości filtrowania adresów źródłowych, dobrym pomysłem (choć bardziej skomplikowanym technicznie) może okazać się zastosowanie chroot, o czym pisałem w tym miejscu. Niestety podatności LPE są wyjątkowo krytyczne i dostępne poprawki najlepiej wdrażać w najszybszym możliwym terminie, o ile oczywiście istnieje realne ryzyko wykorzystania takich luk.