Wydanie OpenSSH 9.2 z naprawą luki w zabezpieczeniach występującej przed uwierzytelnieniem

Opublikowano wydanie OpenSSH 9.2, otwartej implementacji klienta i serwera do pracy z protokołami SSH 2.0 i SFTP. W nowej wersji naprawiono lukę, prowadzącą do podwójnego zwolnienia pamięci na etapie przed uwierzytelnieniem. Luka dotyczy tylko wersji OpenSSH 9.1, w wcześniejszych wersjach problem nie występuje.

Aby stworzyć warunki do pojawienia się luki, wystarczy zmienić baner klienta SSH na „SSH-2.0-FuTTYSH_9.1p1”, aby uzyskać ustawienie flag „SSH_BUG_CURVE25519PAD” i „SSH_OLD_DHGEX”, które zależą od wersji klienta SSH. Po ustawieniu tych flag pamięć dla bufora „options.kex_algorithms” jest zwalniana dwa razy — podczas wykonywania funkcji do_ssh2_kex(), wywołującej compat_kex_proposal(), oraz podczas wykonywania funkcji do_authentication2(), wywołującej po kolei input_userauth_request(), mm_getpwnamallow(), copy_set_server_options(), assemble_algorithms() i kex_assemble_names().

Stworzenie działającego eksploitu luki uznawane jest za mało prawdopodobne, ponieważ proces eksploatacji jest zbyt skomplikowany — nowoczesne biblioteki zarządzania pamięcią oferują zabezpieczenia przed podwójnym zwolnieniem pamięci, a proces pre-auth, w którym występuje błąd, wykonywany jest z obniżonymi uprawnieniami w izolowanym środowisku sandbox.

Oprócz wymienionej luki w nowym wydaniu usunięto również dwa inne problemy z bezpieczeństwem:

  • Błąd w obsłudze ustawienia „PermitRemoteOpen”, prowadzący do ignorowania pierwszego argumentu, jeśli różni się od wartości „any” i „none”. Problem występuje w wersjach nowszych niż OpenSSH 8.7 i prowadzi do pominięcia weryfikacji przy wskazywaniu tylko jednego uprawnienia.
  • Atakujący, kontrolujący serwer DNS używany do rozwiązywania nazw, może osiągnąć wstawienie znaków specjalnych (np. „*”) do plików known_hosts, jeśli w konfiguracji włączone są opcje CanonicalizeHostname i CanonicalizePermittedCNAMEs, a systemowy resolver nie sprawdza poprawności odpowiedzi od serwera DNS. Przeprowadzenie ataku uznawane jest za mało prawdopodobne, ponieważ zwracane nazwy muszą spełniać warunki określone przez CanonicalizePermittedCNAMEs.

Inne zmiany:

  • W ssh_config dla ssh dodano ustawienie EnableEscapeCommandline, które kontroluje włączanie obsługi po stronie klienta sekwencji ucieczki „~C”, zapewniającej wiersz poleceń. Domyślnie obsługa „~C” jest obecnie wyłączona w celu zastosowania bardziej rygorystycznej izolacji sandbox, co potencjalnie może prowadzić do zakłócenia działania systemów, w których „~C” jest używane do przekierowywania portów podczas pracy.
  • W sshd_config dla sshd dodano dyrektywę ChannelTimeout, aby ustalić timeout nieaktywności kanału (kanały, w których przez określony w dyrektywie czas nie rejestrowano ruchu, będą automatycznie zamykane). Dla sesji, X11, agenta i przekierowywania ruchu można ustalić różne timery.
  • W sshd_config dla sshd dodano dyrektywę UnusedConnectionTimeout, która pozwala ustalić timeout dla zakończenia połączeń klientów, które pozostają przez określony czas bez aktywnych kanałów.
  • W sshd dodano opcję „-V” do wyświetlania wersji, analogicznie do podobnej opcji w kliencie ssh.
  • Do wyjścia „ssh -G” dodano wiersz „Host”, odzwierciedlający wartość argumentu o nazwie host.
  • W scp i sftp dodano opcję „-X” do zarządzania takimi parametrami protokołu SFTP, jak rozmiar bufora kopiowania oraz liczba oczekujących na zakończenie zapytań.
  • W ssh-keyscan umożliwiono skanowanie pełnych zakresów adresów CIDR, na przykład „ssh-keyscan 192.168.0.0/24”.

Ź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