È stato pubblicato il rilascio di OpenSSH 9.2, un'implementazione open source per client e server che opera sui protocolli SSH 2.0 e SFTP. Nella nuova versione è stata risolta una vulnerabilità che portava al doppio rilascio della memoria durante la fase precedente all'autenticazione. Solo la versione OpenSSH 9.1 è suscettibile a questa vulnerabilità; nelle versioni precedenti il problema non si manifesta.
Per creare le condizioni che portano alla 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 dedicata al 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 a sua volta 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 doppio rilascio 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à menzionata, nella nuova versione sono state risolte anche altre due problematiche di sicurezza:
- Un errore nella gestione della configurazione "PermitRemoteOpen" che porta all'ignoramento del primo argomento se diverso dai valori "any" e "none". Il problema si manifesta nelle versioni superiori a OpenSSH 8.7 e comporta il mancato controllo quando viene specificato solo un singolo potere.
- Un attaccante che controlla il server DNS utilizzato per la risoluzione dei nomi può ottenere l'inserimento di caratteri speciali (come ad esempio "*") nei file known_hosts, se nelle impostazioni sono attivate le opzioni CanonicalizeHostname e CanonicalizePermittedCNAMEs, e il resolver di sistema non verifica la correttezza delle risposte dal server DNS. L'esecuzione dell'attacco è considerata poco probabile, poiché i nomi restituiti devono soddisfare i requisiti stabiliti tramite CanonicalizePermittedCNAMEs.
Altre modifiche:
- Nel file ssh_config per ssh è stata aggiunta l'impostazione EnableEscapeCommandline, che gestisce l'attivazione dell'elaborazione delle sequenze di escape «~C» sul lato client, fornendo una riga di comando. Per impostazione predefinita, l'elaborazione di «~C» è ora disattivata per utilizzare un'isolamento sandbox più rigoroso, il che potrebbe potenzialmente causare problemi nei sistemi in cui «~C» è 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 viene rilevato traffico per il tempo specificato nella direttiva verranno automaticamente chiusi). Diversi timeout possono essere impostati per la sessione, X11, l'agente e il reindirizzamento del traffico.
- Nel file sshd_config per sshd è stata aggiunta la direttiva UnusedConnectionTimeout, che consente di impostare un timeout per terminare le connessioni dei client che rimangono inattive per un certo periodo senza canali attivi.
- È stata aggiunta all'ssh l'opzione «-V» per visualizzare la versione, simile a un'opzione già presente nel client ssh.
- Nell'output di «ssh -G» è stata aggiunta la riga «Host», che riflette il valore dell'argomento con il nome dell'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 intervalli di indirizzi CIDR, ad esempio, «ssh-keyscan 192.168.0.0/24».
Fonte: opennet.ru
