Wydano OpenSSH 9.2 z poprawką dotyczącą luki w zabezpieczeniach przed uwierzytelnieniem

Opublikowano wydanie OpenSSH 9.2, otwartej implementacji klienta i serwera do pracy z wykorzystaniem protokołów SSH 2.0 i SFTP. Nowa wersja eliminuje lukę, która prowadzi do podwójnego zwolnienia pamięci na etapie poprzedzającym uwierzytelnienie. Dotyczy to tylko wersji OpenSSH 9.1; problem nie pojawia się we wcześniejszych wersjach.

Aby stworzyć warunki do manifestacji podatności, wystarczy zmienić baner klienta SSH na „SSH-2.0-FuTTYSH_9.1p1” w celu ustawienia flag „SSH_BUG_CURVE25519PAD” i „SSH_OLD_DHGEX”, które zależą od wersji SSH klient. Po ustawieniu tych flag pamięć dla bufora „options.kex_algorithms” jest zwalniana dwukrotnie – podczas wykonywania funkcji do_ssh2_kex(), która wywołuje compat_kex_proposal(), oraz podczas wykonywania funkcji do_authentication2(), która wywołuje input_userauth_request(), mm_getpwnamallow( ), copy_set_server_options() wzdłuż łańcucha, assemble_algorithms() i kex_assemble_names().

Utworzenie działającego exploita dla luki jest uważane za mało prawdopodobne, ponieważ proces wykorzystania luki jest zbyt skomplikowany - nowoczesne biblioteki alokacji pamięci zapewniają ochronę przed podwójnym zwolnieniem pamięci, a proces przed autoryzacją, w którym występuje błąd, działa z obniżonymi uprawnieniami w izolowanym środowisko piaskownicy.

Oprócz zauważonej luki, nowa wersja naprawia także dwa kolejne problemy związane z bezpieczeństwem:

  • Wystąpił błąd podczas przetwarzania ustawienia „PermitRemoteOpen”, powodujący zignorowanie pierwszego argumentu, jeśli różni się on od wartości „any” i „none”. Problem pojawia się w wersjach nowszych niż OpenSSH 8.7 i powoduje pomijanie sprawdzania w przypadku określenia tylko jednego uprawnienia.
  • Osoba atakująca kontrolująca serwer DNS używany do rozpoznawania nazw może dokonać podstawienia znaków specjalnych (na przykład „*”) w plikach znane_hosty, jeśli w konfiguracji włączone są opcje CanonicalizeHostname i CanonicalizePermittedCNAMEs, a systemowy mechanizm rozpoznawania nazw nie sprawdza poprawności odpowiedzi z serwera DNS. Atak jest uważany za mało prawdopodobny, ponieważ zwrócone nazwy muszą spełniać warunki określone w CanonicalizePermittedCNAME.

Inne zmiany:

  • Do ssh_config dodano ustawienie EnableEscapeCommandline dla ssh, aby kontrolować, czy włączone jest przetwarzanie po stronie klienta sekwencji ucieczki „~C”, która udostępnia wiersz poleceń. Domyślnie obsługa „~C” jest teraz wyłączona, aby zastosować ściślejszą izolację piaskownicy, co może spowodować uszkodzenie systemów korzystających z „~C” do przekierowania portów w czasie wykonywania.
  • Do sshd_config dodano dyrektywę ChannelTimeout dla sshd, aby ustawić limit czasu nieaktywności kanału (kanały, na których nie jest rejestrowany żaden ruch przez czas określony w dyrektywie, zostaną automatycznie zamknięte). Można ustawić różne limity czasu dla sesji, X11, agenta i przekierowania ruchu.
  • Do sshd_config dla sshd dodano dyrektywę UnusedConnectionTimeout, umożliwiającą ustawienie limitu czasu na zakończenie połączeń klientów, które przez określony czas nie miały aktywnych kanałów.
  • Do sshd dodano opcję „-V”, aby wyświetlić wersję, podobnie jak podobna opcja w kliencie ssh.
  • Dodano linię „Host” do wyjścia „ssh -G”, odzwierciedlającą wartość argumentu nazwy hosta.
  • Do scp i sftp dodano opcję „-X”, aby kontrolować parametry protokołu SFTP, takie jak rozmiar bufora kopii i liczba oczekujących żądań.
  • ssh-keyscan umożliwia skanowanie pełnych zakresów adresów CIDR, na przykład „ssh-keyscan 192.168.0.0/24”.

Źródło: opennet.ru

Dodaj komentarz