Libssh : « Entrez ! C’est ouvert »

Qu’est-ce que libssh ?

Libssh est une bibliothèque écrite en C qui implémente le protocole SSH : elle permet de programmer des applications clientes ou serveurs utilisables par des milliers d’utilisateurs. C’est ce protocole, SSH, qui permet de prendre la main à distance sur des machines de façon sécurisée. Une bibliothèque est un ensemble de fonctions que les développeurs peuvent utiliser pour développer leurs applications sans nécessiter la réécriture de fonctions standards de bas niveau. Si une vulnérabilité est présente dans une bibliothèque utilisée par une application, alors cette application est elle-même vulnérable de la même manière.

Quelle est cette vulnérabilité ?

Il y a quelques années, nous vous présentions Shellshock, une vulnérabilité critique impactant notamment les serveurs SSH.

Cette fois-ci, la vulnérabilité identifiée par le code CVE-2018-10933 permet à un attaquant de se connecter à un serveur SSH vulnérable sans aucun identifiant valide. Le bug a été découvert par Peter Winter-Smith du groupe NCC. Il n’impacte que les serveurs utilisant libssh et non les applications clientes.

La procédure d’authentification légitime au service SSH est réalisée en 4 étapes.

libssh Authentification SSH légitime
Figure 1 – Authentification SSH légitime

C’est au cours du 3ème échange (SSH2_MSG_USERAUTH_REQUEST) que le client transmet au serveur ses identifiants (login et mot de passe). Si ceux-ci sont valides, le serveur gratifie le client par le message de succès SSH2_MSG_USERAUTH_SUCCESS qui entrainera ensuite l’accès complet au service.

La force de cette attaque, qui la rend si particulière, c’est que le client peut déclencher le succès de cette authentification en envoyant le message SSH2_MSG_USERAUTH_SUCCESS à la place du serveur :

libssh Abus de l'authentification SSH
Figure 2 – Abus de l’authentification SSH

Aussi étonnant que cela puisse paraître, le serveur interprète la réception de ce message frauduleux comme « l’authentification a déjà eu lieu », met à jour la machine à état du serveur et donne l’accès au client (ici, l’attaquant).

Quelle est l’étendue de cette vulnérabilité ?

Figure 4 – Serveurs utilisant libssh ouverts sur Internet

Cette vulnérabilité a été introduite dans libssh 0.6 en Janvier 2014. Elle est corrigée en Octobre 2018 par les versions 0.8.4 et 0.7.6. Toute version de libssh supérieure à 0.6 et inférieure à 0.8.4 ou 0.7.6 est donc concernée.

D’après le moteur de recherche Shodan, plus de 6300* serveurs ouverts sur Internet utilisent libssh. Cependant, cette recherche inclut toutes les versions de la bibliothèque (dont les versions inférieures à 0.6) qui ne sont donc pas nécessairement vulnérables.

De plus, bien que triviale à exploiter, l’étendue de cette vulnérabilité doit être nuancée. En effet, une large majorité des serveurs sur internet préfèrent la bibliothèque OpenSSH à libssh. Or, OpenSSH n’est pas concernée par cette vulnérabilité.

Enfin, toutes les implémentations de libssh ne sont pas vulnérables. Par exemple, GitHub a réagi en affirmant que sa façon d’utiliser la bibliothèque libssh ne permet pas l’exploitation de cette vulnérabilité.

Comment s’en prémunir ?

Les mises à jour de la bibliothèque libssh vers les versions 0.8.4 et 0.7.6 permet de combler cette faille de sécurité. Il n’y a aucun autre moyen de contourner cette vulnérabilité. Cependant, le risque peut être atténué en contrôlant l’exposition des serveurs sur internet et bloquer l’accès aux serveurs vulnérables. L’utilisation d’un filtrage IP par liste-blanche est une solution. Il est également envisageable de migrer vers libssh2 ou OpenSSH qui jouit d’un meilleur support et est plus largement utilisé. Dans tous les cas, le service SSH ne devrait jamais être exposé directement sur l’internet mais être protégé par un pare-feu.

Co-écrit par Vincent Jérôme et Matthieu Caron.

Sources

https://www.libssh.org/

https://www.libssh.org/2018/10/16/libssh-0-8-4-and-0-7-6-security-and-bugfix-release/

https://www.shodan.io/search?query=libssh

https://www.zdnet.com/article/security-flaw-in-libssh-leaves-thousands-of-servers-at-risk-of-hijacking/

https://www.bleepingcomputer.com/news/security/hacker-im-logged-in-new-libssh-vulnerability-ok-i-believe-you/

https://github.com/epi052/CVE-2018-10933/blob/master/CVE-2018-10933.py

*Au moment où nous rédigeons cet article.