Luki w OpenSMTPD umożliwiające zdalny i lokalny dostęp do roota

Firma Qualis ujawnił kolejna zdalna krytyczna luka (CVE-2020-8794) w serwerze pocztowym OtwórzSMTPD, opracowany w ramach projektu OpenBSD. Podobnie jak ten zidentyfikowany pod koniec stycznia słaby punkt, nowy problem umożliwia zdalne wykonywanie dowolnych poleceń powłoki na serwerze z uprawnieniami użytkownika root. Słaby punkt wyłączony w problemie OpenSMTPD 6.6.4p1.

Przyczyną problemu jest błąd w kodzie dostarczającym pocztę do zdalnego serwera poczty (a nie w kodzie obsługującym połączenia przychodzące). Atak jest możliwy zarówno po stronie klienta, jak i po stronie serwera. Po stronie klienta atak jest możliwy w domyślnej konfiguracji OpenSMTPD, w której OpenSMTPD akceptuje żądania wyłącznie na wewnętrznym interfejsie sieciowym (localhost) i wysyła wiadomości pocztowe do serwerów zewnętrznych. Aby wykorzystać lukę, wystarczy, że podczas dostarczania listu OpenSMTPD nawiąże sesję z serwerem pocztowym kontrolowanym przez atakującego lub aby atakujący mógł włamać się do połączenia klienta (MITM lub przekierowanie podczas ataków poprzez DNS lub BGP ).

W przypadku ataku po stronie serwera OpenSMTPD musi być skonfigurowany tak, aby odbierał żądania sieci zewnętrznej z innych serwerów pocztowych lub obsługiwał usługi stron trzecich, które umożliwiają wysyłanie żądań na dowolny adres e-mail (na przykład formularze potwierdzenia adresu na stronach internetowych). Na przykład osoba atakująca może połączyć się z serwerem OpenSMTPD i wysłać błędny list (do nieistniejącego użytkownika), co doprowadzi do wysłania w odpowiedzi listu z kodem błędu (odbicie) do serwera atakującego. Osoba atakująca może wykorzystać tę lukę, gdy OpenSMTPD nawiąże połączenie w celu dostarczenia powiadomienia na serwer atakującego. Polecenia powłoki wprowadzone podczas ataku są umieszczane w pliku, który jest wykonywany z uprawnieniami roota po ponownym uruchomieniu OpenSMTPD, więc osoba atakująca musi poczekać na ponowne uruchomienie OpenSMTPD lub zainicjować awarię OpenSMTPD, aby zakończyć atak.

Problem występuje w funkcji mta_io() w kodzie służącym do analizowania wielowierszowej odpowiedzi zwróconej przez serwer zdalny po nawiązaniu połączenia (na przykład „250-ENHANCEDSTATUSCODES” i „250 HELP”). OpenSMTPD oblicza, że ​​pierwsza linia zawiera trzycyfrową liczbę i tekst oddzielone znakiem „-”, a druga linia zawiera trzycyfrową liczbę i tekst oddzielone spacją. Jeżeli po liczbie trzycyfrowej nie następuje spacja i tekst w drugiej linii, wskaźnik służący do zdefiniowania tekstu jest ustawiany na bajt następujący po znaku „\0” i podejmowana jest próba skopiowania danych po końcu linii do bufora.

Na prośbę projektu OpenBSD publikację szczegółów wykorzystania luki przesunięto na 26 lutego, aby umożliwić użytkownikom aktualizację swoich systemów. Problem występuje w kodzie od grudnia 2015 r., jednak eksploatacja przed wykonaniem kodu z uprawnieniami roota jest możliwa od maja 2018 r. Badacze przygotowali działający prototyp exploita, który został pomyślnie przetestowany w kompilacjach OpenSMTPD dla OpenBSD 6.6, OpenBSD 5.9, Debian 10, Debian 11 (testowanie) i Fedora 31.

W OpenSMTPD również zidentyfikowane Kolejna luka (CVE-2020-8793), która umożliwia użytkownikowi lokalnemu odczytanie pierwszej linii dowolnego pliku w systemie. Na przykład możesz przeczytać pierwszą linię pliku /etc/master.passwd, który zawiera skrót hasła użytkownika root. Luka umożliwia także odczytanie całej zawartości pliku należącego do innego użytkownika, jeśli plik ten znajduje się w tym samym systemie plików, co katalog /var/spool/smtpd/. Problemu nie można wykorzystać w wielu dystrybucjach Linuksa, w których wartość /proc/sys/fs/protected_hardlinks jest ustawiona na 1.

Problem jest konsekwencją niepełnej eliminacji problemy, wyrażona podczas audytu przeprowadzonego przez Qualys w 2015 roku. Osoba atakująca może wykonać swój kod z uprawnieniami grupy „_smtpq”, ustawiając zmienną „PATH=”. i umieszczenie skryptu o nazwie makemap w bieżącym katalogu (narzędzie smtpctl uruchamia makemap bez jawnego określenia ścieżki). Uzyskując dostęp do grupy „_smtpq”, osoba atakująca może następnie spowodować sytuację wyścigu (utworzyć duży plik w katalogu offline i wysłać sygnał SIGSTOP), a przed zakończeniem przetwarzania zastąpić plik w katalogu offline twardym dowiązanie symboliczne wskazujące plik docelowy, którego zawartość należy odczytać.

Warto zauważyć, że w Fedorze 31 luka pozwala na natychmiastowe uzyskanie uprawnień grupy root, ponieważ proces smtpctl jest wyposażony w flagę root setgid zamiast flagi setgid smtpq. Uzyskując dostęp do grupy root, możesz nadpisać zawartość /var/lib/sss/mc/passwd i uzyskać pełny dostęp roota do systemu.

Źródło: opennet.ru

Dodaj komentarz