
CVE-2012-2122 - MySQL-Authentifizierungs-Bypass
Proof of Concept (PoC) für CVE-2012-2122, eine kritische Schwachstelle zur Authentifizierungsumgehung, die anfällige MySQL- und MariaDB-Server betrifft.
Haftungsausschluss
Dieses Projekt ist ausschließlich für Bildungszwecke, Sicherheitsforschung und autorisierte Penetrationstests bestimmt. Verwenden Sie diese Software nicht gegen Systeme, die Sie nicht besitzen oder für die Sie keine ausdrückliche Erlaubnis zum Testen haben.
CVE-2012-2122 ist eine Schwachstelle zur Authentifizierungsumgehung, die in der Passwortverifizierungslogik von MySQL entdeckt wurde.
Aufgrund eines Fehlers bei der Ganzzahl-Konvertierung und -Vergleich kann die Authentifizierung fälschlicherweise erfolgreich sein, wenn ein ungültiger Passwortvergleich unter bestimmten Bedingungen als gleich bewertet wird.
Anstatt die Kenntnis eines gültigen Passworts zu erfordern, kann ein Angreifer wiederholt Authentifizierungsversuche mit beliebigen Passwörtern durchführen, bis der Vergleichsfehler ausgelöst wird.
Die Erfolgswahrscheinlichkeit beträgt ungefähr:
Aufgrund dieser relativ hohen Wahrscheinlichkeit können automatisierte Tools die Authentifizierung normalerweise innerhalb weniger hundert Anmeldeversuche umgehen.
| Metrik | Wert |
|---|---|
| CVE | CVE-2012-2122 |
| CVSS v2 | 7.5 (Hoch) |
| Angriffsvektor | Netzwerk |
| Authentifizierung | Keine |
| Benutzerinteraktion | Keine |
| Auswirkung | Authentifizierungsumgehung |
Die Schwachstelle betrifft MySQL-Builds, die mit anfälligen Compiler-Optimierungen kompiliert wurden, einschließlich Versionen wie:
Das Problem betraf hauptsächlich Linux-Distributionen, deren Compiler-Verhalten den Fehler aufdeckte.
Nicht jede Installation dieser Versionen ist anfällig.
Während der Passwortverifizierung vergleicht MySQL intern zwei Hash-Werte mit der Funktion memcmp().
Unter normalen Umständen:
memcmp(hash1, hash2)
gibt zurück:
0 bei GleichheitDie Schwachstelle entstand, weil der Rückgabewert in einer vorzeichenbehafteten Ganzzahl gespeichert und später so konvertiert wurde, dass bestimmte Werte ungleich Null als Authentifizierungserfolg interpretiert werden konnten.
Vereinfachte Logik:
if (memcmp(hash1, hash2) == 0)
{
// Login erfolgreich
}
Bei anfälligem Compiler-Verhalten konnten bestimmte Rückgabewerte von memcmp() den Vergleich fälschlicherweise erfüllen.
Infolgedessen authentifizierten sich gelegentlich falsche Passwörter erfolgreich.
Ein Angreifer benötigt lediglich:
Es sind keine Passwortkenntnisse erforderlich.
Der Angreifer sendet kontinuierlich Anmeldeversuche mit zufälligen Passwörtern.
Irgendwann gelingt eine Authentifizierung aufgrund des Vergleichsfehlers.
Typischer Angriffsablauf:
Versuch #1
↓
Authentifizierung fehlgeschlagen
Versuch #57
↓
Authentifizierung fehlgeschlagen
Versuch #141
↓
Authentifizierung fehlgeschlagen
Versuch #237
↓
Authentifizierung erfolgreich
Im Durchschnitt tritt der Erfolg etwa einmal alle 256 Versuche auf.
Eine erfolgreiche Ausnutzung ermöglicht einem Angreifer:
Wenn administrative Anmeldedaten das Ziel sind, kann die vollständige Kontrolle über den Datenbankserver erlangt werden.
Indikatoren umfassen:
Überprüfen Sie die MySQL-Authentifizierungsprotokolle auf übermäßige fehlgeschlagene Anmeldeaktivitäten.
Die empfohlene Abhilfe ist ein Upgrade auf eine gepatchte Version.
Zusätzliche Schutzmaßnahmen umfassen:
## Beispielverwendung
```bash
python3 exploit.py -ip <target>
Beispiel:
python3 exploit.py -ip 192.168.1.100
---
## Bildungszweck
Dieses Repository zeigt, wie ein subtiler Implementierungsfehler in der Authentifizierungslogik die Passwortverifizierung vollständig untergraben kann.
Obwohl die Schwachstelle über ein Jahrzehnt alt ist, bleibt sie eine wichtige Fallstudie in:
- Sicherer Softwareentwicklung
- Compiler-abhängigem Verhalten
- Authentifizierungsdesign
- Defensiver Programmierung
- Sicherheitsforschung