
CVE-2012-2122 - Contournement d'authentification MySQL
Preuve de concept (PoC) pour CVE-2012-2122, une vulnérabilité critique de contournement de l'authentification affectant les serveurs MySQL et MariaDB vulnérables.
Avertissement
Ce projet est destiné uniquement à des fins éducatives, de recherche en sécurité et de tests de pénétration autorisés. N'utilisez pas ce logiciel contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas une autorisation explicite de tester.
CVE-2012-2122 est une vulnérabilité de contournement de l'authentification découverte dans la logique de vérification des mots de passe de MySQL.
En raison d'un bogue de conversion/comparaison d'entiers, l'authentification peut réussir par erreur lorsqu'une comparaison de mot de passe invalide est évaluée comme égale dans certaines conditions.
Plutôt que de nécessiter la connaissance d'un mot de passe valide, un attaquant peut tenter à plusieurs reprises l'authentification en utilisant des mots de passe arbitraires jusqu'à ce que le bogue de comparaison soit déclenché.
La probabilité de succès est d'environ :
En raison de cette probabilité relativement élevée, les outils automatisés peuvent généralement contourner l'authentification en quelques centaines de tentatives de connexion.
| Métrique | Valeur |
|---|---|
| CVE | CVE-2012-2122 |
| CVSS v2 | 7.5 (Élevé) |
| Vecteur d'attaque | Réseau |
| Authentification | Aucune |
| Interaction utilisateur | Aucune |
| Impact | Contournement de l'authentification |
La vulnérabilité affecte les builds de MySQL compilés avec des optimisations de compilateur vulnérables, y compris des versions telles que :
Le problème a principalement affecté les distributions Linux dont le comportement du compilateur a exposé le bogue.
Toutes les installations de ces versions ne sont pas vulnérables.
Lors de la vérification du mot de passe, MySQL compare en interne deux valeurs de hachage en utilisant la fonction memcmp().
Dans des circonstances normales :
memcmp(hash1, hash2)
retourne :
0 quand ils sont égauxLa vulnérabilité est apparue parce que la valeur de retour était stockée dans un entier signé et convertie plus tard d'une manière qui permettait à certaines valeurs non nulles d'être interprétées comme un succès d'authentification.
Logique simplifiée :
if (memcmp(hash1, hash2) == 0)
{
// Login successful
}
Avec un comportement de compilateur vulnérable, des valeurs de retour spécifiques de memcmp() pouvaient satisfaire incorrectement la comparaison.
En conséquence, des mots de passe incorrects réussissaient parfois l'authentification.
Un attaquant a seulement besoin :
Aucune connaissance du mot de passe n'est requise.
L'attaquant soumet en continu des tentatives de connexion en utilisant des mots de passe aléatoires.
Finalement, une authentification réussit à cause du bogue de comparaison.
Flux d'attaque typique :
Attempt #1
↓
Authentication Failed
Attempt #57
↓
Authentication Failed
Attempt #141
↓
Authentication Failed
Attempt #237
↓
Authentication Successful
Le succès moyen se produit environ une fois toutes les 256 tentatives.
Une exploitation réussie permet à un attaquant de :
Si les identifiants administratifs sont ciblés, un contrôle total du serveur de base de données peut être obtenu.
Les indicateurs incluent :
Examinez les journaux d'authentification MySQL pour une activité excessive de tentatives de connexion échouées.
L'atténuation recommandée est de mettre à niveau vers une version corrigée.
Des mesures défensives supplémentaires incluent :
## Exemple d'utilisation
```bash
python3 exploit.py -ip <target>
Exemple :
python3 exploit.py -ip 192.168.1.100
Ce dépôt démontre comment un bogue d'implémentation subtil dans la logique d'authentification peut complètement compromettre la vérification des mots de passe.
Bien que la vulnérabilité ait plus d'une décennie, elle reste une étude de cas importante dans :