Fonction js sha256 défaillante
Version spip: 4.0.4
Il semblerait que la fonction JS inclue dans la page de login qui calcule le sha256 du mot de passe est défaillante. En effet, Spip nous refuse l'accès à l'interface d'admin après un changement du mot de passe contenant un certain nombre de caractères.
Pour rappel la page de login calcule une version hashée du mot de passe avant de la renvoyer au server (probablement pour éviter d'envoyer le mot de passe en clair, à une époque ou le https n'était pas aussi répandu qu'aujourd'hui).
Pour reproduire voici un petit bout de code JS à lancer dans un repertoire spip:
var fs = require('fs');
eval(fs.readFileSync('prive/javascript/sha256.js')+'');
console.log(hex_sha256('13864750866213ad61682b51.95536250yys0Z0u1Te8nZ0zCVMqK68MlNX'));
console.log(hex_sha256('18280887846213add5aa12c6.82484384bkfWyizpu9Pl8TK91NnPkQEntgIV'));
Ce code inclu la fonction sha256 appelée dans la page de login. Il demande ensuite à hasher deux mots de passe (on reconnait ici la concatenation alea+password). Le résultat du premier appel est faux, le deuxième est bon. Vous pouvez vérifier avec la commande sha256sum sous linux:
echo -n '13864750866213ad61682b51.95536250yys0Z0u1Te8nZ0zCVMqK68MlNX' | sha256sum
echo -n '18280887846213add5aa12c6.82484384bkfWyizpu9Pl8TK91NnPkQEntgIV' | sha256sum
Vous pouvez aussi reproduire ce bug en essayant de mettre un mot de passe de 25 caractères alphanumériques dans un compte spip.
J'imagine que pour corriger ce bug il y a deux possibilités:
- Éstimer que toutes les interfaces de login sont en https et arrêter de hasher le mot de passe avant de l'envoyer au serveur.
- Changer de méthode pour calculer le hash (peut-être trouver une bibliothèque plus récente).