La version 9.2 d'OpenSSH, une mise en œuvre open source du client et du serveur pour les protocoles SSH 2.0 et SFTP, a été publiée. Dans cette nouvelle version, une vulnérabilité conduisant à un double déni de service a été corrigée dans la phase précédant l'authentification. Seule la version 9.1 d'OpenSSH est affectée, tandis que les versions antérieures ne présentent pas ce problème.
Pour créer les conditions de manifestation de la vulnérabilité, il suffit de modifier la bannière du client SSH en « SSH-2.0-FuTTYSH_9.1p1 » afin de provoquer l'activation des indicateurs « SSH_BUG_CURVE25519PAD » et « SSH_OLD_DHGEX », qui dépendent de la version du client SSH. Une fois ces indicateurs activés, la mémoire réservée pour le buffer « options.kex_algorithms » est libérée deux fois — lors de l'exécution de la fonction do_ssh2_kex(), qui appelle compat_kex_proposal(), et lors de l'exécution de la fonction do_authentication2(), qui appelle en chaîne input_userauth_request(), mm_getpwnamallow(), copy_set_server_options(), assemble_algorithms() et kex_assemble_names().
La création d'un exploit fonctionnel pour cette vulnérabilité est considérée comme peu probable, car le processus d'exploitation est trop complexe — les bibliothèques modernes de gestion de mémoire offrent une protection contre les doubles libérations de mémoire, et le processus de pré-authentification dans lequel l'erreur se produit s'exécute avec des privilèges réduits dans un environnement sandbox isolé.
En plus de la vulnérabilité mentionnée, deux autres problèmes de sécurité ont également été corrigés dans cette nouvelle version :
- Une erreur lors du traitement de la configuration « PermitRemoteOpen », qui entraîne l'ignorance du premier argument s'il diffère des valeurs « any » et « none ». Le problème se manifeste dans les versions ultérieures à OpenSSH 8.7 et entraîne l'absence de validation lors de la spécification d'une seule autorisation.
- Un attaquant contrôlant le serveur DNS utilisé pour la résolution de noms peut parvenir à insérer des caractères spéciaux (par exemple, « * ») dans les fichiers known_hosts, si les options CanonicalizeHostname et CanonicalizePermittedCNAMEs sont activées dans la configuration, et si le résolveur système ne vérifie pas la validité des réponses du serveur DNS. L'attaque est considérée comme peu probable, car les noms renvoyés doivent respecter les conditions définies via CanonicalizePermittedCNAMEs.
Autres changements :
- Dans ssh_config pour ssh, il a été ajouté le paramètre EnableEscapeCommandline, qui contrôle le traitement côté client de la séquence d'échappement «~C», fournissant une ligne de commande. Par défaut, le traitement de «~C» est maintenant désactivé pour utiliser une isolation sandbox plus stricte, ce qui peut potentiellement entraîner des dysfonctionnements dans les systèmes où «~C» est utilisé pour le transfert de ports pendant l'utilisation.
- Dans sshd_config pour sshd, la directive ChannelTimeout a été ajoutée pour définir le délai d'inactivité du canal (les canaux qui, pendant la durée spécifiée dans la directive, n’enregistrent pas de trafic seront automatiquement fermés). Différents délais peuvent être spécifiés pour les sessions X11, l'agent et le transfert de trafic.
- Dans sshd_config pour sshd, la directive UnusedConnectionTimeout a été ajoutée, permettant de définir un délai pour terminer les connexions clientes qui sont inactives pendant un certain temps sans canaux actifs.
- Dans sshd, l'option «-V» a été ajoutée pour afficher la version, de manière similaire à la même option dans le client ssh.
- La sortie de «ssh -G» a été enrichie d'une ligne «Host», reflétant la valeur de l'argument du nom d'hôte.
- Dans scp et sftp, l'option «-X» a été ajoutée pour gérer des paramètres du protocole SFTP tels que la taille du buffer de copie et le nombre de requêtes en attente de réponse.
- Dans ssh-keyscan, il est désormais possible de scanner des plages CIDR complètes d'adresses, par exemple «ssh-keyscan 192.168.0.0/24».
Source : opennet.ru
