Diese Algorithmen gelten allesamt als unsicher.
Falls die Datenbank jemals in falsche Hände geraten sollte, so würden
zumindest die mit crypt und MD5 gehashten Passwörter schnell zu knacken
sein. Die mit SHA-1 gehashten dürften etwas länger dauern, aber auch sie
sind gefährdet. Daher werden sie in der Datenbank schlicht
entfernt. Admins müssen für solche Accounts neue Passwörter vergeben.
Dies sollte nur Accounts betreffen, deren Passwort sich seit der
Einführung von SHA256S als Mechanismus in kivitendo 2.7.0 Mitte 2011
nicht mehr geändert hat.
use strict;
use Carp;
-use Digest::MD5 ();
use Digest::SHA ();
use Encode ();
use PBKDF2::Tiny ();
if ($params{algorithm} =~ m/^SHA256/) {
return '{' . $params{algorithm} . '}' . Digest::SHA::sha256_hex($salt . $params{password});
- } elsif ($params{algorithm} =~ m/^SHA1/) {
- return '{' . $params{algorithm} . '}' . Digest::SHA::sha1_hex($salt . $params{password});
-
- } elsif ($params{algorithm} =~ m/^MD5/) {
- return '{' . $params{algorithm} . '}' . Digest::MD5::md5_hex($salt . $params{password});
-
- } elsif ($params{algorithm} eq 'CRYPT') {
- return '{CRYPT}' . crypt($params{password}, substr($params{login}, 0, 2));
-
} elsif ($params{algorithm} =~ m/^PBKDF2/) {
return $class->hash_pkkdf2(password => $params{password}, stored_password => $params{stored_password});
my ($class, $password, $default_algorithm) = @_;
return ($1, $2) if $password =~ m/^\{ ([^\}]+) \} (.+)/x;
- return ($default_algorithm || 'CRYPT', $password);
+ return ($default_algorithm || 'PBKDF2', $password);
}
1;
noch existieren und verweigert den Start mit einer hilfreichen
Fehlermeldung, solange sie noch vorhanden sind.
+* Die Unterstützung unsicherer Passwort-Hashing-Mechanism wurde
+ entfernt. Für BenutzerInnen, die noch alte Mechanismen verwenden,
+ müssen die Passwörter einmalig in der Administrationsoberfläche
+ zurückgesetzt werden.
+
+ Dies betrifft nur Accounts, deren Passwort sich das letzte Mal vor
+ kivitendo 2.7.0 geändert hat.
+
Upgrade auf v3.3.0
==================
und standardmäßig bei allen zukünftigen Passwortänderungen
benutzt.
+ - Die Unterstützung der unsicheren Passwort-Hashing-Mechanism crypt,
+ MD5 und SHA-1 wurde entfernt, und entsprechend gehashte Passwörter
+ wurden in der Datenbank entfernt. Für BenutzerInnen, die noch alte
+ Mechanismen verwenden, müssen die Passwörter einmalig in der
+ Administrationsoberfläche zurückgesetzt werden.
+
2015-08-20 - Release 3.3
Größere neue Features:
--- /dev/null
+-- @tag: remove_insecurely_hashed_passwords
+-- @description: Passwörter löschen, die mit unsicheren Hash-Verfahren gehasht wurden
+-- @depends: release_3_3_0
+-- @charset: utf-8
+UPDATE auth.user
+SET password = '*'
+WHERE (password IS NOT NULL)
+ AND (password NOT LIKE '{PBKDF2%')
+ AND (password NOT LIKE '{SHA256%');