È stata pubblicata la versione OpenSSH 9.2, un'implementazione open source del client e del server per i protocolli SSH 2.0 e SFTP. Nella nuova versione è stata corretta una vulnerabilità che porta a un doppio rilascio di memoria prima dell'autenticazione. Solo la versione OpenSSH 9.1 presenta questa vulnerabilità; non si manifesta in versioni precedenti.
Per creare le condizioni che possano manifestare la vulnerabilità, è sufficiente modificare il banner del client SSH in «SSH-2.0-FuTTYSH_9.1p1», in modo da attivare i flag «SSH_BUG_CURVE25519PAD» e «SSH_OLD_DHGEX», che dipendono dalla versione del client SSH. Dopo l'attivazione di questi flag, la memoria per il buffer «options.kex_algorithms» viene liberata due volte: durante l'esecuzione della funzione do_ssh2_kex(), che chiama compat_kex_proposal(), e durante l'esecuzione della funzione do_authentication2(), che richiama in cascata input_userauth_request(), mm_getpwnamallow(), copy_set_server_options(), assemble_algorithms() e kex_assemble_names().
La creazione di un exploit funzionante per la vulnerabilità è considerata poco probabile, poiché il processo di sfruttamento è troppo complicato: le moderne librerie di gestione della memoria offrono protezione contro il rilascio doppio della memoria e il processo pre-auth, nel quale si verifica l'errore, viene eseguito con privilegi ridotti in un ambiente sandbox isolato.
Oltre alla vulnerabilità segnalata, nel nuovo rilascio sono state risolte anche altre due problematiche di sicurezza:
- Un errore nella gestione dell'impostazione «PermitRemoteOpen», che porta all'ignoranza del primo argomento se diverso dai valori «any» e «none». Il problema si manifesta nelle versioni successive a OpenSSH 8.7 e comporta l'omissione del controllo quando viene specificato solo un singolo permesso.
- Un server DNS aggressivo e controllato, utilizzato per la risoluzione dei nomi, può ottenere la sostituzione di caratteri speciali (ad esempio, «*») nei file known_hosts se nelle configurazioni sono abilitate le opzioni CanonicalizeHostname e CanonicalizePermittedCNAMEs, e se il risolutore di sistema non verifica la correttezza delle risposte dal server DNS. L'esecuzione di un attacco è considerata altamente improbabile, poiché i nomi restituiti devono corrispondere ai criteri stabiliti tramite CanonicalizePermittedCNAMEs.
Altre modifiche:
- Nel file ssh_config per ssh è stata aggiunta l'impostazione EnableEscapeCommandline, che gestisce l'attivazione del trattamento delle sequenze di escape «~C» lato client, fornendo una riga di comando. Per impostazione predefinita, il trattamento di «~C» è ora disabilitato per utilizzare un isolamento più rigoroso della sandbox, il che potrebbe potenzialmente compromettere il funzionamento dei sistemi in cui «~C» viene utilizzato per il reindirizzamento delle porte durante l'esecuzione.
- Nel file sshd_config per sshd è stata aggiunta la direttiva ChannelTimeout per impostare il timeout di inattività del canale (i canali in cui non è stato registrato traffico per il periodo specificato nella direttiva verranno automaticamente chiusi). Per la sessione, X11, l'agente e il reindirizzamento del traffico possono essere impostati diversi timeout.
- Nel file sshd_config per sshd è stata aggiunta la direttiva UnusedConnectionTimeout, che consente di impostare un timeout per il completamento delle connessioni client che rimangono inattive per un certo periodo di tempo.
- È stata aggiunta l'opzione «-V» a sshd per visualizzare la versione, in analogia con un'opzione simile nel client ssh.
- Nell'output di «ssh -G» è stata aggiunta la riga «Host», che riflette il valore dell'argomento con il nome host.
- In scp e sftp è stata aggiunta l'opzione «-X» per gestire parametri del protocollo SFTP come la dimensione del buffer di copia e il numero di richieste in attesa di completamento.
- In ssh-keyscan è consentita la scansione di interi CIDR di indirizzi, per esempio, «ssh-keyscan 192.168.0.0/24».
Fonte: opennet.ru
