Lange Passwörter legen Djangos Webapps lahm

Das freie Web-Framework Django überprüft eingegebene Passwörter nicht auf Länge, bevor es sie hasht. Das können Angreifer für DoS-Angriffe nutzen.

In Pocket speichern vorlesen Druckansicht 70 Kommentare lesen
Lesezeit: 2 Min.
Von
  • Fabian A. Scherschel

Angreifer können die Authentifizierungs-Komponente des freien Webentwicklungs-Frameworks Django mit der Eingabe absurd langer Passwörter lahmlegen. Diese DoS-Schwachstelle (Denial of Service) ist darauf zurückzuführen, dass die django.contrib.auth-Funktion die Länge der zu prüfenden Passwörter bei der Authentifizierung nicht einschränkt. Die drei Updates Django 1.4.8, 1.5.4 und 1.6 beta 4 schaffen Abhilfe und können auf der Webseite des Projektes heruntergeladen werden.

Django speichert Passwörter nicht als Klartext sondern als Hashes in seiner Datenbank — eigentlich ein löbliches Vorgehen. Das heißt aber auch, dass das Framework bei jedem Login-Versuch den Hash des eingegebenen Passwortes neu berechnen muss. Der voreingestellte Hashing-Algorithmus PBKDF2 braucht dabei für ein Passwort von 1 MB Größe etwa eine Minute auf typischer Webserver-Hardware. Da die Login-Maske Passwörter jeglicher Länge akzeptiert, kann ein Angreifer auf diese Weise den Webserver komplett auslasten, was den Rest der Webapplikation komplett lahm legt.

Die Entwickler haben das Problem in den neuen Versionen behoben, indem sie die maximale Passwortlänge auf 4096 Bytes beschränkt haben. Das Update wurde außerhalb von Djangos normalem Veröffentlichungsprozess herausgegeben, da die Lücke nicht vertraulich an das Sicherheitsteam des Projektes gemeldet wurde sondern öffentlich an die Mailingliste für Entwickler. Bei Lücken, die vertraulich an das Sicherheitsteam gemeldet werden, geben die Entwickler normalerweise eine Warnung eine Woche vor dem Patch über ihre Sicherheits-Mailingliste heraus. In diesem Fall empfehlen sie, so schnell wie möglich die jetzt veröffentlichten Updates zu installieren. (fab)