Menü
Alert!
Security

MySQL-Datenbank-Zugang auch ohne Passwort

Von
vorlesen Drucken Kommentare lesen 187 Beiträge

Die Datenbankserver MySQL und MariaDB akzeptieren in bestimmten Konfigurationen jedes Passwort – wenn man es nur lange genug probiert. Die Erfolgswahrscheinlichkeit liegt bei 1 aus 256, wie der MariaDB-Sicherheitskoordinator Sergei Golubchik auf der Mailingliste oss-sec bekanntgegeben hat.

Da mehrere hundert Versuche pro Sekunde möglich sind, kann ein Angreifer innerhalb kürzester Zeit die Kontrolle über verwundbare Installationen übernehmen. Er muss zwar einen gültigen Benutzernamen kennen, die Wahrscheinlichkeit, dass ein "root" existiert, ist jedoch hoch.

Die Datenbankserver vergleicht bei der Anmeldung den gespeicherten Hash-Wert mit dem des gerade eingegebenen Passworts. Durch eine implizite Typumwandlung von einem Integer zu einem vorzeichenbehafteten Character kann das ergeben, dass die Werte gleich wären – selbst wenn memcmp() einen Wert ungleich 0 zurück liefert. Dies tritt auf, wenn der Rückgabewert außerhalb des Intervalls zwischen -128 und 127 liegt.

Laut Golubchik sind theoretisch alle MySQL- und MariaDB-Versionen bis einschließlich 5.1.61, 5.2.11, 5.3.5 und 5.5.22 verwundbar – allerdings nur, wenn sie mit bestimmten Optionen kompiliert wurden; etwa mit der SSE-optimierte memcmp-Funktion der glibc. Nach bisherigem Kenntnisstand sind die von den Herstellern angebotenen Binaries nicht verwundbar. Ob die mit Distributionen ausgelieferten Versionen betroffen sind, ist noch unklar.

Wer testen möchte, ob die eigene Installation verwundbar ist, kann versuchen, den Fehler etwa mit folgendem Einzeiler zu provozieren:

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

Meldet sich daraufhin die Kommandozeile des Datenbankservers (etwa mit mysql>), sollte man schleunigst handeln. Abhilfe schafft ein Update auf die MySQL-Versionen 5.1.62, 5.2.12, 5.3.6 und 5.5.23 respektive MariaDB 5.1.63, 5.5.24 und 5.6.6. In dem oben verlinkten Advisory findet man zudem die passenden Patches. Nach dem Update prüfen die Datenbankserver den von memcmp() zurückgelieferten Wert zusätzlich durch eine Funktion test().

Update 11.6.2010, 15:30: Erklärung der Fehlerursache geringfügig korrigiert und die Empfehlung zum Selbsttest geändert, da dieser auch bei anfälligen Systemen fehlschlagen kann. (rei)