Luki w OpenSMTPD, które umożliwiają zdalne i lokalne uzyskanie uprawnień root

Firma Qualys ujawnili kolejną zdalną krytyczną lukę (CVE-2020-8794) w serwerze pocztowym OpenSMTPD, rozwijanym w ramach projektu OpenBSD. Podobnie jak wykryta pod koniec stycznia luka, nowy problem umożliwia zdalne wykonanie dowolnych poleceń shell na serwerze z uprawnieniami użytkownika root. Luka naprawiono w wersji OpenSMTPD 6.6.4p1.

Problem jest spowodowany błędem w kodzie odpowiedzialnym za dostarczanie wiadomości na zdalny serwer pocztowy (nie w kodzie obsługującym przychodzące połączenia). Atak może mieć miejsce zarówno po stronie klienta, jak i serwera. Po stronie klienta atak może wystąpić w domyślnej konfiguracji OpenSMTPD, w której OpenSMTPD przyjmuje żądania tylko na wewnętrznym interfejsie sieciowym (localhost) i wysyła wiadomości e-mail do zewnętrznych serwerów. Aby wykorzystać lukę, wystarczy, aby w trakcie dostarczania wiadomości OpenSMTPD nawiązał sesję z serwerem pocztowym kontrolowanym przez atakującego, lub aby atakujący mógł włączyć się w połączenie klienta (MITM lub przekierowanie w trakcie ataków przez DNS lub BGP).

Aby przeprowadzić atak po stronie serwera, OpenSMTPD musi być skonfigurowany do przyjmowania zewnętrznych żądań sieciowych od innych serwerów pocztowych lub obsługiwać zewnętrzne usługi, które pozwalają na wysłanie żądania na dowolny e-mail (np. formularze potwierdzenia adresu na stronach). Na przykład, przestępca może połączyć się z serwerem OpenSMTPD i wysłać niepoprawną wiadomość (do nieistniejącego użytkownika), co skutkuje wysłaniem odpowiedzi z kodem błędu (bounce) na serwer atakującego. Przestępca może wykorzystać lukę w momencie, gdy OpenSMTPD połączy się w celu dostarczenia powiadomienia do serwera atakującego. Wprowadzone podczas ataku polecenia shell są umieszczane w pliku, który jest wykonywany z uprawnieniami root po ponownym uruchomieniu OpenSMTPD, dlatego atakujący aby zakończyć atak musi poczekać na ponowne uruchomienie OpenSMTPD lub spowodować jego awarię.

Problem występuje w funkcji mta_io() w kodzie odpowiedzialnym za analizę wieloliniowej odpowiedzi od zdalnego serwera po nawiązaniu połączenia (np. „250-ENHANCEDSTATUSCODES” i „250 HELP”). W OpenSMTPD zakłada się, że pierwsza linia zawiera trzycyfrowy numer i tekst, oddzielone znakiem „-”, a druga linia trzycyfrowy numer i tekst, oddzielone spacją. Jeśli w drugiej linii po trzycyfrowym numerze nie ma spacji ani tekstu, wskaźnik używany do określenia tekstu jest ustawiany na bajt następny po znaku '\0' i podejmowana jest próba skopiowania do bufora danych, które znajdują się po końcu linii.

Na prośbę projektu OpenBSD publikacja szczegółów dotyczących wykorzystania luki została opóźniona do 26 lutego, aby dać użytkownikom możliwość aktualizacji swoich systemów. Problem obecny jest w kodzie od grudnia 2015 roku, ale możliwość wykonania kodu z prawami roota dostępna jest od maja 2018 roku. Badacze przygotowali działający prototyp exploita, który został pomyślnie przetestowany w wersjach OpenSMTPD dla OpenBSD 6.6, OpenBSD 5.9, Debian 10, Debian 11 (testing) oraz Fedora 31.

W OpenSMTPD również wykryto występuje inna luka (CVE-2020-8793), która pozwala lokalnemu użytkownikowi odczytać pierwszą linię dowolnego pliku w systemie. Na przykład, można odczytać pierwszą linię /etc/master.passwd, która zawiera hash hasła użytkownika root. Luka ta także pozwala na odczytanie całej zawartości pliku należącego do innego użytkownika, jeśli plik znajduje się w tej samej FS co katalog /var/spool/smtpd/. Problem nie jest wykorzystywany w wielu dystrybucjach Linuksa, w których wartość /proc/sys/fs/protected_hardlinks jest ustawiona na 1.

Problem jest wynikiem niepełnego usunięcia problemach, zgłoszonego w procesie audytu przeprowadzonego przez Qualys w 2015 roku. Atakujący może osiągnąć wykonanie swojego kodu z prawami grupy „_smtpq”, ustawiając zmienną „PATH=.” i umieszczając w bieżącym katalogu skrypt o nazwie makemap (narzędzie smtpctl uruchamia makemap bez wyraźnego wskazania ścieżki). Uzyskując dostęp do grupy „_smtpq”, atakujący może wtedy wywołać stan wyścigu (utworzyć duży plik w katalogu offline i wysłać sygnał SIGSTOP) i, przed zakończeniem przetwarzania, podmienić plik w katalogu offline na twardą symlink, wskazującą na docelowy plik, którego zawartość należy odczytać.

Interesujące jest to, że w Fedora 31 luka pozwala na natychmiastowe uzyskanie uprawnień grupy root, ponieważ proces smtpctl ma flagę setgid root, zamiast setgid smtpq. Uzyskując dostęp do grupy root, można nadpisać zawartość /var/lib/sss/mc/passwd i uzyskać pełny dostęp root w systemie.

Ź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