]> wagnertech.de Git - kivitendo-erp.git/commitdiff
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 d566cf0f19fce3f482c694ef3f23951e3c0c658d..20a9ed57c4bae3e0ad84fab23f12867b33988c82 100644 (file)
@@ -3,7 +3,6 @@ package SL::Auth::Password;
 use strict;
 
 use Carp;
 use strict;
 
 use Carp;
-use Digest::MD5 ();
 use Digest::SHA ();
 use Encode ();
 use PBKDF2::Tiny ();
 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});
 
   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});
 
   } 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;
   my ($class, $password, $default_algorithm) = @_;
 
   return ($1, $2) if $password =~ m/^\{ ([^\}]+) \} (.+)/x;
-  return ($default_algorithm || 'CRYPT', $password);
+  return ($default_algorithm || 'PBKDF2', $password);
 }
 
 1;
 }
 
 1;
index 358ced0169292af69b623fd4265b50338184bd31..64603f5d5f17b4485cab887e1f0f591ec200e424 100644 (file)
@@ -35,6 +35,14 @@ Upgrade auf v?????
   noch existieren und verweigert den Start mit einer hilfreichen
   Fehlermeldung, solange sie noch vorhanden sind.
 
   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
 ==================
 
 Upgrade auf v3.3.0
 ==================
 
index d06bfb5fd276f6f42b244f56e631d2de4a32c48a..67358d65ac9d3b00838dc8f3c34f8cf7075ed6f3 100644 (file)
@@ -61,6 +61,12 @@ Sicherheit:
     und standardmäßig bei allen zukünftigen Passwortänderungen
     benutzt.
 
     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:
 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%');