From 69af50448452e9b292134bee25705a64505e8ff4 Mon Sep 17 00:00:00 2001 From: Moritz Bunkus Date: Mon, 11 Jan 2016 13:34:30 +0100 Subject: [PATCH] =?utf8?q?Passw=C3=B6rter:=20Unterst=C3=BCtzung=20f=C3=BCr?= =?utf8?q?=20crypt,=20MD5=20und=20SHA-1=20entfernt?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 | 12 +----------- doc/UPGRADE | 8 ++++++++ doc/changelog | 6 ++++++ .../remove_insecurely_hashed_passwords.sql | 9 +++++++++ 4 files changed, 24 insertions(+), 11 deletions(-) create mode 100644 sql/Pg-upgrade2-auth/remove_insecurely_hashed_passwords.sql 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%'); -- 2.20.1