#1 2012-08-11 01:09:06

lildadou
Membre
2012-08-10
38

[sécurité] Amélioration du hash des mots de passe

(re-)bonsoir,
Je voudrais vous faire part d'une amélioration significative de la protection des mots de passes avec une modification triviale à réaliser pour peu que c'est une installation fraiche (tout les anciens mot de passes sont perdus).
Source: http://www.php.net/manual/fr/faq.passwo … s.fasthash

Avant de commencer vous allez devoir modifier la structure de la table "users" pour qu'elle accepte des valeurs de mot de passe plus élevée.

Code:

ALTER TABLE piwigo_users MODIFY password varchar(255);

Maintenant nous allons créer un "grain de sel" avec un petit jeu:
- choisissez un nombre entre 04 et 31 (sur 2 digit le nombre)
- choisissez un 22 caractère parmi a à z, A à Z et 0 à 9 ([a-z][A-Z][0-0]{22})

Votre sel est $2y$+réponse1+$+réponse1+$
Ex: "$2y$12$T9sWUQ03RRG6oSwtDvJtyn$"

Éditez votre fichier de config et remplacer la ligne

Code:

$conf['pass_convert'] = create_function('$s', 'return md5($s);');

par (mettez votre sel à la place)

Code:

$conf['pass_convert'] = create_function('$s', 'return crypt($s, \'$2y$12$T9sWUQ03RRG6oSwtDvJtyn\');');

Changer votre mot de passe avant de vous déconnecter.

Edit:
- correction simple/double-quote
- utilisation de l'algo 2y (http://www.php.net/security/crypt_blowfish.php)

Dernière modification par lildadou (2012-10-15 17:26:03)

Hors ligne

#2 2012-08-14 19:23:37

flop25
Équipe Piwigo
2006-07-06
6466

Re: [sécurité] Amélioration du hash des mots de passe

Merci
j'y ai pensé aussi mais le problème est la maj ! Il faut renvoyer un mail à tous les utilisateurs ou mettre une procédure de maj du mpd à la connexion : dans les deux cas il faut garder une trace de l'identification d'avant
Mais n'hésitez pas à créer un ticket Mantis et à continuer à aider ;) http://piwigo.org/bugs/

Hors ligne

#3 2012-08-19 23:44:38

ddtddt
Équipe Piwigo
Quetigny (21) - France
2007-07-27
14627

Re: [sécurité] Amélioration du hash des mots de passe

Attention à ceux qui utilise une identification commune avec d'autre applis ;-)


Vous aimez Piwigo alors n'hésitez pas à participer avec nous, plus d'infos sur la page "Contribuer à Piwigo". Si vous n'avez pas beaucoup de temps et que vous souhaitez nous soutenir vous pouvez aussi le faire par un don.

Hors ligne

#4 2012-09-14 01:04:33

mistic100
Ex Equipe Piwigo
Lyon
2008-09-27
3556

Re: [sécurité] Amélioration du hash des mots de passe

si je ne me trompe pas on a $conf['secret_key'] qui est généré à l'installation, on peut aussi l'utiliser comme sel (ça permet d'être sur d'avoir un truc aléatoire)

Hors ligne

#5 2012-09-14 08:44:43

flop25
Équipe Piwigo
2006-07-06
6466

Re: [sécurité] Amélioration du hash des mots de passe

Oui tout à fait.
Mais le problème est la retro compatibilité

Hors ligne

#6 2012-09-14 09:27:47

plg
Équipe Piwigo
Nantes, France, Europe
2002-04-05
12342

Re: [sécurité] Amélioration du hash des mots de passe

flop25 a écrit:

Oui tout à fait.
Mais le problème est la retro compatibilité

Justement, j'ai pensé à un truc...

Pour regénérer les mots de passe, il faut qu'on ait le mot de passe en clair. Il n'y a qu'un seul moment où Piwigo a ce mot de passe en clair : lors de l'identification. On pourrait, au moment de l'identification, mettre à jour le hash du mot de passe en base.

Ensuite comment différencier un mot de passe qui a déjà été mis à jour et un mot de passe encore en MD5 ? Avec la longueur de la chaîne hashée. Un mot de passe hashé en MD5 fait 32 charactères (0-9a-f). Selon l'algorithme choisi, un mot de passe hashé fera davantage.

Je n'ai pas poussé l'étude, mais il faut choisir l'algorithme de hashage judicieusement car certains nécessitent une version récente de PHP (comme $2x$ ou $2y$ proposés ci-dessus, qui nécessitent PHP 5.3.7 !). L'autre point important, c'est qu'il faut que l'algo retourne le même résultat quelque soit la machine sur laquelle il est exécuté : on doit pouvoir déménager son Piwigo facilement d'un hébergeur à l'autre sans devoir réinitialiser tous les mots de passe.


Dernier billet du blog Piwigo.com (20 juin 2019) Modus, nouveau thème par défaut sur Piwigo.com

Hors ligne

#7 2012-09-14 12:27:17

mistic100
Ex Equipe Piwigo
Lyon
2008-09-27
3556

Re: [sécurité] Amélioration du hash des mots de passe

au pire si on choisit un autre algo qui fait aussi 32 chars on peut cheater en ajoutant un 0 à la fin de tous les nouveaux mots de passe

Hors ligne

#8 2012-10-15 09:50:38

lildadou
Membre
2012-08-10
38

Re: [sécurité] Amélioration du hash des mots de passe

Bonjour à tous,
probablement depuis la mise à jour de PHP, la méthode donnée si dessous ne fonctionne plus et introduit une vulnérabilité grave : un attaquant peut se loguer uniquement avec le login (tout les mots de passe sont acceptés). Le problème est du à une mauvaise utilisation des double-quote mais n'existait pas quand j'ai rédigé ce post.

Plus ennuyeux, le code avec les caractère correctement échappé ne fonctionne pas non plus:

Code:

$conf['pass_convert'] = create_function('$s', 'return crypt($s, \'$2a$12$T9sWUQ03RRG6oSwtDvJtyn$\');');

Alors qu'il fonctionne très bien en console:

Code:

<?php
$lol=create_function('$s', 'return crypt($s, \'$2a$12$T9sWUQ03RRG6oSwtDvJtyn$\');');
echo $lol('prout')."\n";
echo crypt('prout', '$2a$12$T9sWUQ03RRG6oSwtDvJtyn$');
?>
$2a$12$T9sWUQ03RRG6oSwtDvJtyeVMo73pP8Ry0HCUsIFidDkIrW/oUtp3q
$2a$12$T9sWUQ03RRG6oSwtDvJtyeVMo73pP8Ry0HCUsIFidDkIrW/oUtp3q

PS: Woula! En dumpant la BDD je me rend compte que la solution n'a jamais fonctionné! Et je suis incapable de dire pourquoi!

PS2: J'ai finalement trouvé ; c'est la taille du champ password qui cause problème!

Code:

DESCRIBE piwigo_users;
+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | smallint(5)  | NO   | PRI | NULL    | auto_increment |
| username     | varchar(100) | NO   | UNI |         |                |
| password     | varchar(32)  | YES  |     | NULL    |                |
| mail_address | varchar(255) | YES  |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+

En cherchant de la doc, j'ai aussi découvert que md5, sha1 ou même sha512 sont des fonctions de hashage qui ne doivent pas être utilisées pour chiffrer des mots de passe! Car si elle empêche de trouver un pass depuis son hash, seules, elles n'empêchent pas une attaque par bruteforce (car elles sont très rapides à calculer). C'est d'ailleurs pour cela que PHP propose hash() et crypt(). hash() est le hashage normal, crypt effectue le même hashage... 5000 fois de suite.

Bref, j'ai trouvé et corrigé mon problème. J'enlève l'ALERT et je corrige le premier post.

Dernière modification par lildadou (2012-10-15 16:57:48)

Hors ligne

#9 2012-10-17 10:25:37

plg
Équipe Piwigo
Nantes, France, Europe
2002-04-05
12342

Re: [sécurité] Amélioration du hash des mots de passe

J'ai eu l'occasion de bosser hier sur le domaine du hashage des mots de passe. Ma conclusion c'est d'utiliser phpass pour Piwigo 2.5, avec conversion progressive et automatique des mots de passe actuellement en md5.

phpass propose de faire du blowfish avec salt automatique, mais pour une meilleure compatibilité avec les versions de PHP antérieures à la 5.3, il propose une option de $portable_hashes qui se résume à faire des itérations de md5 + salt.

phpass est utilisé par WordPress, Drupal, phpBB...


Dernier billet du blog Piwigo.com (20 juin 2019) Modus, nouveau thème par défaut sur Piwigo.com

Hors ligne

Pied de page des forums

Propulsé par FluxBB

github twitter facebook newsletter Faire un don Piwigo.org © 2002-2019 · Contact