From: Moritz Bunkus Date: Mon, 11 Jan 2016 12:34:30 +0000 (+0100) Subject: Passwörter: Unterstützung für crypt, MD5 und SHA-1 entfernt X-Git-Tag: release-3.4.1~471 X-Git-Url: http://wagnertech.de/git?a=commitdiff_plain;h=69af50448452e9b292134bee25705a64505e8ff4;p=kivitendo-erp.git Passwörter: Unterstützung für crypt, MD5 und SHA-1 entfernt 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. --- diff --git a/SL/Auth/Password.pm b/SL/Auth/Password.pm index d566cf0f1..20a9ed57c 100644 --- a/SL/Auth/Password.pm +++ b/SL/Auth/Password.pm @@ -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; diff --git a/doc/UPGRADE b/doc/UPGRADE index 358ced016..64603f5d5 100644 --- a/doc/UPGRADE +++ b/doc/UPGRADE @@ -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 ================== diff --git a/doc/changelog b/doc/changelog index d06bfb5fd..67358d65a 100644 --- a/doc/changelog +++ b/doc/changelog @@ -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 index 000000000..8a75228bf --- /dev/null +++ b/sql/Pg-upgrade2-auth/remove_insecurely_hashed_passwords.sql @@ -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%');