Firma Qualis
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ż
Problem jest konsekwencją niepełnej eliminacji
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