Vulnérabilité libssh, sérieuse et pourtant si triviale

Implémentation de Secure Shell, libssh nourrissait en son sein une bien vilaine faille. Un problème de machine à état permettant de contourner le mécanisme d’authentification du serveur. Comment ? Il suffit tout simplement de lui dire être authentifié.

Le Cert-Fr a annoncé ce matin qu’il s’apprête à publier un avis sur la vulnérabilité CVE-2018-10933. Qu’est-ce donc que la vulnérabilité CVE-2018-10933, me demanderez-vous. Il s’agit d’un bug affectant libssh, une bibliothèque codée en C implémentant le protocole SSH utilisé par exemple pour sécuriser l’accès à distance à des serveurs. A ne pas confondre avec OpenSSH ou libssh2.

Depuis quatre ans, un défaut se cache dans cette implémentation de Secure Shell permettait de contourner le mécanisme d’authentification. Et ce de manière triviale : ce serait hilarant si ce n’était pas aussi inquiétant. En effet, il suffit à un attaquant de présenter au serveur vulnérable le message SSH2_MSG_USERAUTH_SUCCESS en lieu et place du message SSH2_MSG_USERAUTH_REQUEST… Rien de plus !

« Le message SSH2_MSG_USERAUTH_SUCCESS est utilisé par le serveur pour informer le client qu'il a été authentifié avec succès. Il met à jour la machine à état pour marquer le client comme étant authentifié avec le serveur. Ce que j’ai découvert, c’est que si le même message est envoyé au serveur par le client, il met à jour la machine à état pour indiquer au serveur que le client est authentifié » explique Peter Winter-Smith, le chercheur à l’origine de cette découverte.

Une portée limitée ?

Il explique que la cause de ce bug est le partage par le serveur libssh et le client d’une même machine à état, « ainsi les paquets conçus uniquement pour être traités par et mettre à jour l'état du client peuvent mettre à jour l'état du serveur ». Pourquoi s’embêter à dérober des identifiants quand on peut simplement demander gentiment l’accès au serveur ?

L’équipe derrière libssh a depuis publié deux patchs pour corriger cette vulnérabilité. On ignore encore si CVE-2018-10933 a été exploité lors de ces quatre années d’existence. Shodan recense 6500 serveurs connectés à Internet utilisant cette bibliothèque, mais visiblement toutes les implémentations de libssh n’étaient pas vulnérables. C’est du moins ce qu’explique GitHub, grand utilisateur de libssh, dans un tweet, le repository expliquant ne pas être affecté « en raison de la façon dont nous utilisons la bibliothèque ».