MySQL/MariaDB sur Ubuntu : Password check FAIL

Une vulnérabilité importante a été trouvée dans l’implémentation Ubuntu des serveurs MySQL et MariaDB.

Cette faille permet de se loguer avec un login utilisateur connu quelque soit le mot de passe soumit. Il suffit de répéter des tentatives de connexion jusqu’à ce que le login réussisse.

Comment c’est possible ? Et bien la vérification du password est faite bien un memcmp qui retourne un int positif, négatif ou nul en fonction du résultat.
Cet entier est retourné par une fonction baptisée « check_scramble » dont le prototype est le suivant (le prototype actuel n’est peut-être pas exactement le même mais le type de retour n’a pas changé) :

my_bool check_scramble(const char *scramble, const char *message, ulong *hash_pass, my_bool old_ver)

Le type my_bool étant défini de cette façon : typedef char my_bool
On a donc un cast d’entier en char qui peut donner des résultats inattendus… par exemple 0 qui laisse penser que les deux chaines passées à memcmp sont valides.

HDMoore a posté un one-liner qui permet l’exploitation de cette faille :

for i in `seq 1 1000`; do mysql -u root –password=bad -h 127.0.0.1 2>/dev/null; done

Si ça fonctionne au bout d’un moment c’est aussi parce que MySQL/MariaDB ne compare pas juste les hash : des chaines de caractères aléatoires entre en jeu à chaque fois. Il est estimé qu’il faut environ 300 essais maximum pour entrer dans une session MySQL sans connaître le mot de passe.

Le genre de bourdes qu’on avait plus l’habitude de voir chez Debian.

Edit : d’autres distribs sont vulnérables

Une réflexion au sujet de « MySQL/MariaDB sur Ubuntu : Password check FAIL »

Les commentaires sont fermés.