Podatność w OpenSSH, umożliwiająca zdalne wykonanie kodu z uprawnieniami roota na serwerach z Glibc

Firma Qualys wykryła krytyczną lukę (CVE-2024-6387) w OpenSSH, która umożliwia zdalne wykonanie kodu z uprawnieniami root bez przechodzenia przez uwierzytelnianie. Luka, która otrzymała kodową nazwę regreSSHion, występuje w domyślnej konfiguracji od wersji OpenSSH 8.5 na systemach z standardową biblioteką Glibc.

Możliwość przeprowadzenia ataku została zademonstrowana na 32-bitowym systemie z Glibc z włączoną ochroną ASLR (losowanie przestrzeni adresowej). Do udanego ataku w warunkach laboratoryjnych potrzebne było 6-8 godzin, podczas których serwerem nieprzerwanie nawiązywane były połączenia z maksymalną dopuszczalną w konfiguracji sshd intensywnością. Przeprowadzenie ataku jest łatwiejsze i wymaga mniej czasu na systemach bez ASLR lub w dystrybucjach wykorzystujących zmodyfikowany OpenSSH, w którym wyłączono ponowne losowanie ASLR dla każdego połączenia. Postanowiono nie publikować publicznie działającego prototypu exploit'a do momentu całkowitego usunięcia luki, ale dostępny jest wystarczająco szczegółowy opis istoty luki, co sprawia, że pojawienie się zewnętrznych exploitów jest kwestią czasu.

Nie można wykluczyć możliwości przeprowadzenia ataku na 64-bitowe systemy, jednak działający exploit dla takich systemów na razie nie jest gotowy. Uważa się, że przeprowadzenie ataku na 64-bitowe systemy zajmie znacznie więcej czasu, ale nie więcej niż tydzień. OpenSSH w OpenBSD nie jest podatny na ten problem, ponieważ od 2001 roku w tym systemie stosowany jest mechanizm zabezpieczający, blokujący tego typu ataki. W innych systemach opartych na standardowych bibliotekach, innych niż Glibc, teoretycznie możliwa jest adaptacja metody do przeprowadzenia ataku (w firmie Qualys ten temat nie został jeszcze zbadany).

Luka została usunięta w opublikowanej dzisiaj wersji OpenSSH 9.8 (łatka). Śledzić publikację aktualizacji pakietów w dystrybucjach można na stronach: Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, ROSA, Gentoo, ALT Linux, Arch i FreeBSD. Jako obejście problemu z blokowaniem luki w sshd_config można ustawić parametr „LoginGraceTime=0”, przy czym wyłączenie limitu czasu ułatwi inicjowanie odmowy usługi przy nawiązywaniu dużej liczby połączeń, które przekraczają limity ustawione za pomocą parametru MaxStartups.
Jednym z objawów prób ataku jest pojawienie się w logu dużej liczby wpisów „Timeout before authentication”.

Vulnerability appeared as a result of a regression change included in the OpenSSH 8.5 release, leading to a race condition in the signal handling code in sshd. The regression disabled the protection against an older vulnerability CVE-2006-5051, which manifested itself before version OpenSSH 4.4 (2006 year) and was of a theoretical nature.
Podczas prac nad OpenSSH 8.5 przez pomyłkę został usunięty blok „#ifdef DO_LOG_SAFE_IN_SIGHAND” z funkcji sigdie(), która jest bezpośrednio wywoływana z obsługi SIGALRM.

Obsługa SIGALRM jest wywoływana w sshd w trybie asynchronicznym, jeśli klient nie zakończył procesu autoryzacji w czasie ograniczonym przez timeout połączenia (LoginGraceTime, domyślnie 120 sek). Atak opiera się na tym, że obsługa sygnału wywołuje funkcje, które nie są bezpieczne przy asynchronicznym przetwarzaniu sygnałów, takie jak syslog(). Funkcja syslog() w Glibc nie jest zaprojektowana do użycia w asynchronicznie wykonywanych obsługach sygnałów, ponieważ wywołuje funkcje malloc() i free(). Wystąpienie sygnału SIGALRM, który przerywa działanie określonego kodu w sshd, może prowadzić do zakłócenia stanu wykonania, a celem exploita jest stworzenie warunków do przerwania odpowiedniego kodu w odpowiednim momencie wykonania. Wrażliwość nie dotyczy OpenBSD, ponieważ w nim zamiast syslog() z obsługi sygnału SIGALRM wywoływana jest funkcja syslog_r(), specjalnie stworzona do asynchronicznego uruchamiania.

Ź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