Aller au contenu
Korben, roi d’internet, logo bébé avec des lunettes en mode thug life

Faille dans MySQL et MariaDB

Ce qui est rigolo avec les failles de sécurité, c’est qu’on pourrait être tenté de dire que plus les années passent, plus elles sont complexes et tordues à exploiter, mais en fait non… Certaines restent toujours très accessibles et simples, ouvrant des portes aussi grosses que votre tata Monique.

La dernière en date touche malheureusement MariaDB et MySQL, 2 bases de données très très très utilisées dans le monde (enfin, la seconde un peu plus que la première quand même ^^). Cette faille basique rend possible une attaque sur le mot de passe en saturant le logiciel de tentatives d’authentification. Il suffit de connaitre simplement le login qui va bien et qui la plupart du temps est root, et environ 300 essais ratés plus tard, la fonction memcmp accorde l’accès avec n’importe quel mot de passe. Magique !

En réalité, lorsqu’un utilisateur se connecte à une base MariaDB/MySQL, un jeton (token SHA généré à partir du mot de passe et d’une valeur aléatoire) est calculé et comparé à la valeur attendue. Et malheureusement, à cause de cette faille, il arrive que les 2 valeurs soient considérées comme égales alors qu’elles ne le sont pas.

Ce problème touche les versions de MySQL 5.1.61, 5.2.11, 5.3.5, 5.5.22 et toutes les versions de MariaDB. Ubuntu 64-bit 10.04, 10.10, 11.04, 11.10, et 12.04 sont toutes vulnérables ainsi que la version MySQL 5.5.23 de Fedora et d’OpenSUSE 12.1 64-bit. Par contre, les Debian, Red Hat Enterprise 4, 5, 6 et Gentoo 64 bits sont clean.

Pour tester chez vous, voici ce qu’il faut taper :

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

Maintenant la vraie question c’est : Comment se protéger ?

Et bien en attendant que cette faille soit patchée un peu partout, il suffit d’interdire l’accès à la base depuis l’extérieur. Logiquement, par défaut c’est le cas dans la plupart des distributions, mais si vous voulez être sûr, éditez le fichier my.cnf (moi, il se trouve ici /etc/mysql/my.cnf) puis dans la section [mysqld], ajoutez ou contrôlez que le paramètre bind-address est bien en 127.0.0.1.

Après fait la modif, relancez MySQL et voilà !

Source


Les articles du moment