Weak random generator use in fusiondirectory-setup
Weak random generator use in fusiondirectory-setup
À l'occasion d'une installation de Fusion Directory, j'ai vu qu'on pouvait chiffrer le mot de passe d'accès au serveur LDAP.
Le script qui fait cela dans fusiondirectory-1.3 est (contrib/bin/fusiondirectory-setup) tire une clé à l'aide de la fonction get_random_string, définie à partir de la ligne 228 :
sub get_random_string {
my ($size) = @_;
$size = 32 if !$size;
my @chars = ("A".."Z", "a".."z", '.', '/', 0..9);
my $string;
$string .= $chars[rand @chars] for 1..$size;
return $string;
}
La fonction utilisée pour cela est rand (ligne juste au-dessus du return). Comme le dit la documentation de rand (https://perldoc.perl.org/functions/rand.html) :
rand is not cryptographically secure. You should not rely on it in security-sensitive situations. As of this writing, a number of third-party CPAN modules offer random number generators intended by their authors to be cryptographically secure, including: Data::Entropy, Crypt::Random, Math::Random::Secure, and Math::TrulyRandom.
Le problème est que le résultat d'une fonction comme rand peuvent relativement aisément se deviner. La vulnérabilité est ici relativement mineure mais je vous suggère de corriger car cela n'est pas très difficile : il suffit de faire appel à la fonction Random du module Crypt, déjà utilisé dans ce script.
Cela dit :
-
Je ne suis pas certain d'avoir bien compris toutes les implications de ce chiffrement et de l'utilisation du module header d'apache pour transmettre la clé de chiffrement à l'application. Est-ce que l'idée est de résister à une faille qui permettrait de faire de la lecture de fichiers arbitraires avec les droits du serveur mais pas de lire les entêtes HTTP ?
-
Dans tous les cas, stocker le mot de passe LDAP (chiffré ou non) n'est pas l'idéal en terme de sécurité (c'est plutôt une vulnérabilité importante) ; idéalement, c'est le mot de passe entré par l'utilisateur de Fusion Directory qui devrait être utilisé auprès du serveur LDAP et les droits devraient être gérés au niveau du serveur LDAP. J'ai l'impression que ce n'est pas ce qui a été fait mais j'imagine que c'est assez difficile à modifier après coup.
-
Merci pour ce projet et merci d'en avoir fait un logiciel libre ! (Je l'ai découvert en aidant une association à monter son serveur LDAP)
Très cordialement,
Judicaël Courant.