MySQL et MariaDB : alerte à une faille de sécurité "tragiquement comique"
50 % des serveurs seraient touchés
Le 2012-06-14 12:52:46, par Idelways, Expert éminent sénior
MySQL et son fork MariaDB souffrent d'une grave vulnérabilité à une attaque de force brute, prodigieusement facile à exploiter.
En peu de secondes, un pirate peut contourner l'authentification aux serveurs de base de données pour peu qu'il dispose d'un nom d'utilisateur correct (« root » est en général toujours présent et actif avec un maximum de prévilèges).
Il suffit au pirate de répéter quelques centaines de tentatives de connexion avec un mot de passe erroné et le tour est joué, explique Sergei Golubchi, coordinateur sécurité à MariaDB sur le mailing-list oss-sec.
La faille se situe au niveau d'une librairie C dont dépendent ces SGBD. Il s'agit d'une erreur de casting qui a une chance sur 256 fois de se produire lors de la vérification du résultat de comparaison des mots de passe fournis et attendus (avec la fonction memcmp). De ce fait, entre 300 et 512 tentatives de connexions devraient suffire pour gagner un accès non autorisé à la base.
Boucle shell pour tester la vulnérabilité de son serveur
Mais tous les builds ne sont pas vulnérables estime HD Moore, un expert en sécurité reconnu. Les builds officiels ne peuvent en l'occurrence être compromis à partir des versions 5.1.61, 5.2.11, 5.3.5 et 5.5.22.
Ce n'est pas le cas de ceux d'Ubuntu Linux 64-bit (versions 8.04 jusqu'à la 12.04), OpenSuSE 12.1 64-bit MySQL 5.5.23-log, Debian Unstable 64-bit 5.5.23-2, Fedora, et Arch Linux.
Les développeurs d'Ubuntu ont annoncé des mises à jour pour toutes les versions de MySQL depuis Ubuntu 8.04.
Sur les 1.74 million de serveurs identifiés, Moore estime 50 % d'entre eux victimes d'une faille qu'il qualifie de « tragiquement comique ».
En effet, le fix ne requiert la modification que d'une seule ligne de code.
Sources :
post de Sergei Golubchik
post de HD Moor
bulletin de sécurité
Notice de sécurité d'Ubuntu
Et vous ?
Vos serveurs sont-ils vulnérables ?
Que pensez-vous de cette vulnérabilité ?
En peu de secondes, un pirate peut contourner l'authentification aux serveurs de base de données pour peu qu'il dispose d'un nom d'utilisateur correct (« root » est en général toujours présent et actif avec un maximum de prévilèges).
Il suffit au pirate de répéter quelques centaines de tentatives de connexion avec un mot de passe erroné et le tour est joué, explique Sergei Golubchi, coordinateur sécurité à MariaDB sur le mailing-list oss-sec.
La faille se situe au niveau d'une librairie C dont dépendent ces SGBD. Il s'agit d'une erreur de casting qui a une chance sur 256 fois de se produire lors de la vérification du résultat de comparaison des mots de passe fournis et attendus (avec la fonction memcmp). De ce fait, entre 300 et 512 tentatives de connexions devraient suffire pour gagner un accès non autorisé à la base.
Code bash : |
$ for i in `seq 1 1000`; do mysql -u root --password=bad -h 127.0.0.1 2>/dev/null; done
Mais tous les builds ne sont pas vulnérables estime HD Moore, un expert en sécurité reconnu. Les builds officiels ne peuvent en l'occurrence être compromis à partir des versions 5.1.61, 5.2.11, 5.3.5 et 5.5.22.
Ce n'est pas le cas de ceux d'Ubuntu Linux 64-bit (versions 8.04 jusqu'à la 12.04), OpenSuSE 12.1 64-bit MySQL 5.5.23-log, Debian Unstable 64-bit 5.5.23-2, Fedora, et Arch Linux.
Les développeurs d'Ubuntu ont annoncé des mises à jour pour toutes les versions de MySQL depuis Ubuntu 8.04.
Sur les 1.74 million de serveurs identifiés, Moore estime 50 % d'entre eux victimes d'une faille qu'il qualifie de « tragiquement comique ».
En effet, le fix ne requiert la modification que d'une seule ligne de code.
Sources :
Et vous ?
-
gb_68Membre confirméJ'avoue ne pas avoir tout de suite compris ce bug ayant une probabilité de 1/256.
Voici quelques morceaux codes complémentaires :Code C : 1
2
3
4
5
6
7
8
9
10
11
12/* Check that scrambled message corresponds to the password; the function [...] RETURN VALUE 0 password is correct !0 password is invalid */ my_bool check_scramble(const char *scramble_arg, const char *message, const uint8 *hash_stage2) {
C'est bien ce que fait memcmp
Code C : return memcmp(hash_stage2, hash_stage2_reassured, SHA1_HASH_SIZE);
Code C : typedef char my_bool; /* Small bool */
le 15/06/2012 à 0:15 -
MiaowZedongMembre extrêmement actif.....
Comme quoi, à négliger les bases pour privilégier le haut niveau, on fait des grosses conneries.le 14/06/2012 à 13:09 -
gangsoleilModérateurUn peu plus d'explications : la lib teste le mot de passe sur plus de caracteres que ne le supporte mysql, qui tronque donc simplement (cast) avant de faire la comparaison. C'est ballot. Et pour repondre a javaBean, le fait de tronquer une valeur est une connerie du developpeur qui n'a rien a voir avec le langage utilise.
Cette vulnerabilite montre bien que, lorsqu'on ne sait pas ce que l'on fait, il y a des chances pour que ca se passe mal.
La securite est souvent ajoutee en dernier, apres que l'application ait ete developpee, par des gens n'y connaissant pas forcement grand chose. Dans ce cas, le bugfix est dramatiquement simple, mais il y a des cas ou c'est tout le design de l'application qu'il faut revoir, pour la meme faute de conception au demarrage.le 14/06/2012 à 17:00 -
MiaowZedongMembre extrêmement actifle 14/06/2012 à 15:57
-
camus3Membre éprouvéEn même temps cela prouve l'utilité de l'open source.
Combien de bugs inconnus et failles existent dans les SGBD dont le code est fermé ? de plus le fix est simple suffit de corriger et de recompiler.
Bref on peut tout à faire faire du proprio , mais l’accès aux sources d'un produit permet finalement de pointer facilement des bugs ou des failles de sécurités.
Comment savoir si tel ou tel système proprio n'a pas de backdoor ?le 15/06/2012 à 10:03 -
ManusDeiExpert confirméBon, maintenant la question importante, developpez.net utilise MySQL ?le 14/06/2012 à 15:24
-
eti0123456789Membre du ClubCelà n'empêche pas non plus les logiciels propriétaires d'être également touchés par des failles simplement exploitables, on a vu par exemple la CVE-2010-4669, où le fait de lancer un grand nombre de RA IPv6 sur un réseau avec un sipmple script fait planter les machines Windows du réseau... Et on pourrait noter que contrairement à la faille de MySQL, celle-ci ne semble toujours pas corrigée !le 15/06/2012 à 13:23
-
berceker unitedExpert éminentNon le but, c'est que le entreprise puissent prendre le problème au sérieux de faire la correction très rapidement. C'est à dire de retirer [Root] .le 14/06/2012 à 14:40
-
camus3Membre éprouvéwow ça fait peur...le 14/06/2012 à 13:21
-
Pill_SMembre expertaie
! le 14/06/2012 à 14:10