Releasen av OpenSSH 9.2 har publicerats, en öppen implementering av en klient och server för att arbeta med SSH 2.0 och SFTP-protokollen. Den nya versionen eliminerar en sårbarhet som leder till dubbel frigöring av minne i förautentiseringsstadiet. Endast OpenSSH 9.1-versionen påverkas, problemet förekommer inte i tidigare versioner.
För att skapa förutsättningar för manifestation av sårbarhet räcker det att ändra SSH-klientbannern till "SSH-2.0-FuTTYSH_9.1p1" för att ställa in flaggorna "SSH_BUG_CURVE25519PAD" och "SSH_OLD_DHGEX", som beror på versionen av SSH. klient. Efter att ha ställt in dessa flaggor frigörs minnet för bufferten "options.kex_algorithms" två gånger - när funktionen do_ssh2_kex() körs, som anropar compat_kex_proposal(), och när funktionen do_authentication2() körs, som anropar input_userauth_request(), mm_getpwna ), copy_set_server_options() längs kedjan , assemble_algorithms() och kex_assemble_names().
Att skapa en fungerande exploatering för sårbarheten anses osannolikt, eftersom exploateringen är för komplicerad - moderna minnesallokeringsbibliotek ger skydd mot dubbel frigöring av minne, och förautentiseringsprocessen där felet finns körs med reducerade privilegier i en isolerad sandlådemiljö.
Utöver den noterade sårbarheten fixar den nya versionen även ytterligare två säkerhetsproblem:
- Ett fel inträffade vid bearbetning av "PermitRemoteOpen"-inställningen, vilket gjorde att det första argumentet ignorerades om det skiljer sig från värdena "any" och "none". Problemet dyker upp i versioner som är nyare än OpenSSH 8.7 och gör att kontrollen hoppas över när endast en behörighet anges.
- En angripare som kontrollerar DNS-servern som används för att lösa namn kan ersätta specialtecken (t.ex. "*") i known_hosts-filer om alternativen CanonicalizeHostname och CanonicalizePermittedCNAMEs är aktiverade i konfigurationen och systemupplösaren inte kontrollerar korrektheten av svar från DNS-servern. Attacken anses osannolik eftersom de returnerade namnen måste matcha villkoren som specificeras genom CanonicalizePermittedCNAMEs.
Andra ändringar:
- En EnableEscapeCommandline-inställning har lagts till i ssh_config för ssh för att styra om bearbetning på klientsidan av escapesekvensen "~C" som tillhandahåller kommandoraden är aktiverad. Som standard är "~C"-hantering nu inaktiverad för att använda stramare sandlådeisolering, vilket potentiellt bryter system som använder "~C" för portvidarebefordran under körning.
- ChannelTimeout-direktivet har lagts till i sshd_config för sshd för att ställa in timeout för kanalinaktivitet (kanaler där ingen trafik registreras under den tid som anges i direktivet stängs automatiskt). Olika tidsgränser kan ställas in för session, X11, agent och trafikomdirigering.
- Direktivet UnusedConnectionTimeout har lagts till i sshd_config för sshd, vilket gör att du kan ställa in en timeout för att avsluta klientanslutningar som har varit utan aktiva kanaler under en viss tid.
- Alternativet "-V" har lagts till i sshd för att visa versionen, liknande det liknande alternativet i ssh-klienten.
- Lade till raden "Värd" till utgången av "ssh -G", vilket återspeglar värdet på argumentet värdnamn.
- Alternativet "-X" har lagts till i scp och sftp för att styra SFTP-protokollparametrar såsom kopieringsbuffertstorleken och antalet väntande förfrågningar.
- ssh-keyscan tillåter genomsökning av hela CIDR-adressintervall, till exempel "ssh-keyscan 192.168.0.0/24".
Källa: opennet.ru