OpenSSH 9.2 er udgivet, som er en open source-implementering af klient og server til brug med SSH 2.0- og SFTP-protokoller. I den nye version er en sårbarhed, der fører til dobbelt frigivelse af hukommelse før afslutning af autentificering, blevet rettet. Kun OpenSSH 9.1-versionen er sårbar, og problemet optræder ikke i tidligere versioner.
For at skabe forhold for, at sårbarheden opstår, er det tilstrækkeligt at ændre SSH-klientens banner til «SSH-2.0-FuTTYSH_9.1p1», så flags «SSH_BUG_CURVE25519PAD» og «SSH_OLD_DHGEX», der afhænger af SSH-klientens version, aktiveres. Når disse flags er sat, frigives hukommelsen til bufferen «options.kex_algorithms» to gange — første gang i funktionen do_ssh2_kex(), som kalder compat_kex_proposal(), og anden gang i funktionen do_authentication2(), som kaldet i kæden input_userauth_request(), mm_getpwnamallow(), copy_set_server_options(), assemble_algorithms() og kex_assemble_names().
At skabe et fungerende exploit for sårbarheden vurderes at være usandsynligt, da udnyttelsesprocessen er alt for kompleks — moderne hukommelsesfordelingsbiblioteker tilbyder beskyttelse mod dobbelt frigivelse af hukommelse, og pre-auth-processen, hvor fejlen optræder, kører med nedsatte rettigheder i et isoleret sandbox-miljø.
Udover den nævnte sårbarhed er der også rettet yderligere to sikkerhedsproblemer i den nye version:
- En fejl i behandlingen af indstillingen «PermitRemoteOpen», der forårsager, at det første argument ignoreres, hvis det er forskelligt fra værdierne «any» og «none». Problemet optræder i versioner nyere end OpenSSH 8.7 og fører til, at kontroloversigt undlades, når der kun angives én tilladelse.
- En angriber, der kontrollerer DNS-serveren, der bruges til at bestemme navne, kan få indsat specielle tegn (for eksempel «*») i known_hosts-filer, hvis konfigurationen har indstillingerne CanonicalizeHostname og CanonicalizePermittedCNAMEs aktiveret, og systemresolveren ikke kontrollerer korrektheden af svarene fra DNS-serveren. Udførelsen af angrebet anses for usandsynlig, da de returnerede navne skal overholde de betingelser, der er angivet gennem CanonicalizePermittedCNAMEs.
Andre ændringer:
- I ssh_config for ssh er tilføjet indstillingen EnableEscapeCommandline, som styrer aktiveringen af klientbehandling af escape-sekvenserne «~C», der giver adgang til kommandolinjen. Som standard er behandlingen af «~C» nu deaktiveret for at bruge en strammere sandbox-isolering, hvilket potentielt kan føre til problemer i systemer, hvor «~C» anvendes til portvideresendelse under drift.
- I sshd_config for sshd er der tilføjet direktivet ChannelTimeout til at angive timeout for uvirksomhed på kanalen (kanaler, hvor der ikke er registreret trafik i den angivne tid, vil automatisk blive lukket). For session, X11, agent og trafikvideresendelse kan der angives forskellige timeouts.
- I sshd_config for sshd er der tilføjet direktivet UnusedConnectionTimeout, der muliggør angivelse af timeout for afslutning af klientforbindelser, der har været inaktive i en bestemt tid uden aktive kanaler.
- I sshd er der tilføjet muligheden «-V» for at vise versionen, ligesom den findes i ssh-klienten.
- I outputtet fra «ssh -G» er der tilføjet linjen «Host», der afspejler værdien af argumentet med værtsnavnet.
- I scp og sftp er der tilføjet muligheden «-X» til at styre sådanne SFTP-protokolparametre som kopieringsbufferstørrelse og antal ventende anmodninger.
- I ssh-keyscan er scanning af hele CIDR-adresseområder tilladt, f.eks. «ssh-keyscan 192.168.0.0/24».
Kilde: opennet.ru
