Django: Denial-of-Service-Attacke durch lange Passwörter

Eine Sicherheitslücke im Django Authentication Framework hat zur Folge, dass ein entfernter Angreifer Denial-of-Service-Attacken gegen das System durchführen kann.

Das Framework “django.contrib.auth” speichert, wie viele andere Anmeldesysteme auch, einen Hash von Benutzerpasswörtern. Gibt ein Anwender sein Passwort ein, so wird dessen Hash ebenfalls berechnet und mit dem Wert in der Datenbank verglichen. Die eigentliche Hash-Funktion lässt sich über die “PASSWORD_HASHERS”-Einstellung konfigurieren. Die Django-Standardkonfiguration verwendet für die Hashes den Algorithmus PBKDF2, der aufgrund seiner Komplexität besonders gut gegen Passwort-Brute-Force-Attacken gewappnet ist.

Allerdings erlaubt das etwas komplizierte Hash-Berechnungsverfahren auch eine Attacke gegen PBKDF2, denn Django limitiert die Länge von Passwörtern nicht. Dadurch kann ein potentieller Angreifer das Django-System mit sehr vielen sehr langen Passwörter überladen, da die Hash-Berechnung in diesem Fall sehr aufwändig ist. Auf einem durchschnittlichen Server benötigt beispielsweise das Berechnen des Hashes für ein 1-Megabyte-Passwort mit PBKDF2 circa eine Minute. Werden mehrere solcher Passwörter an das System gesendet, so führt dies zu einer Denial-of-Service-Attacke.

Dieses Problem wurde kürzlich korrigiert, und Django erlaubt jetzt nur noch Passwörter mit einer Länge von maximal 4096 Byte.

Betroffen von diesem Fehler sind alle Versionen vor 1.4.8, 1.5.4 und 1.6 beta 4.

Nach oben