Passwörter: Unterstützung für crypt, MD5 und SHA-1 entfernt
authorMoritz Bunkus <m.bunkus@linet-services.de>
Mon, 11 Jan 2016 12:34:30 +0000 (13:34 +0100)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Mon, 11 Jan 2016 12:34:30 +0000 (13:34 +0100)
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.

SL/Auth/Password.pm
doc/UPGRADE
doc/changelog
sql/Pg-upgrade2-auth/remove_insecurely_hashed_passwords.sql [new file with mode: 0644]

index d566cf0..20a9ed5 100644 (file)
@@ -3,7 +3,6 @@ package SL::Auth::Password;
 use strict;
 
 use Carp;
-use Digest::MD5 ();
 use Digest::SHA ();
 use Encode ();
 use PBKDF2::Tiny ();
@@ -49,15 +48,6 @@ sub hash {
   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});
 
@@ -86,7 +76,7 @@ sub parse {
   my ($class, $password, $default_algorithm) = @_;
 
   return ($1, $2) if $password =~ m/^\{ ([^\}]+) \} (.+)/x;
-  return ($default_algorithm || 'CRYPT', $password);
+  return ($default_algorithm || 'PBKDF2', $password);
 }
 
 1;
index 358ced0..64603f5 100644 (file)
@@ -35,6 +35,14 @@ Upgrade auf v?????
   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
 ==================
 
index d06bfb5..67358d6 100644 (file)
@@ -61,6 +61,12 @@ Sicherheit:
     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:
diff --git a/sql/Pg-upgrade2-auth/remove_insecurely_hashed_passwords.sql b/sql/Pg-upgrade2-auth/remove_insecurely_hashed_passwords.sql
new file mode 100644 (file)
index 0000000..8a75228
--- /dev/null
@@ -0,0 +1,9 @@
+-- @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%');