À propos de libmcrypt et php-mcrypt
Je ne compte plus les fois où j'ai du expliquer pourquoi utiliser cette bibliothèque ou cette extension est une grave erreur. Il est donc temps d'en faire un article.
libmcrypt est un projet mort, non maintenu depuis plus de 8 ans, la dernière version 2.5.8 a été publiée en février 2007 !... et malgré les nombreux tickets ouverts, aucune activité.
La cryptographie est un élément essentiel de la gestion de la sécurité. Si on regarde en arrière, les failles découvertes et corrigées dans divers logiciels, la nécessite d'augmenter les standards de sécurités et d'abandonner les vieux algorithmes, comment peut-on imaginer utiliser une vieillerie de plus de 8 ans ?
Il existe plusieurs bibliothèques alternatives bien maintenues :
Et, pour PHP, plusieurs autres solutions sont disponibles:
- la fonction crypt, hachage à sens unique
- l'extension openssl
- les fonctions de hachage de mot de passe, depuis PHP 5.5 ou leur implémentation en PHP password_compat
- les classes phpseclib implémentées en PHP, qui peuvent profiter des extensions intallées.
Une RFC a été proposée pour retirer l'extension mcrypt de PHP 7, mais, honte à nous, elle n'a pas été acceptée (15-18), elle restera donc disponible.
L'oeuf ou la poule ? L'extension est utilisée car elle est disponible, et elle est conservée parce qu'elle est utilisée.
Nous devons vraiment communiquer sur ce problème, et c'est ce que nous faisons déjà depuis longtemps chez Fedora, la plupart des projets comprennent le problème et acceptent de le corriger en basculant sur une implémentation plus sécurisées, quelques exemples :
- phpMyAdmin utilise phpseclib.
- roundcubemail a basculé sur l'utilisation de openssl par defaut, voir rcube.php
- CakePHP est informé, voir ticket #5440, et la PR #5496 a été intégrée dans la version 3.0
- Laravel est aussi informé, voir ticket #9020, et la PR #9041 a été intégrée dans la version 5.1
- etc
Certain framework continuent de proposer une interface pour utiliser mcrypt (ex Zend\\Crypt\\Symmetric\\MCrypt, ticket #3), encore une fois, c'est l'oeuf ou la poule,les applications utilisent cette fonction parce qu'elle existe.
Ceci explique pourquoi certaines distributions linux professionnelles, comme RHEL, ne fournissent ni libmcrypt ni php-mcrypt. On devrait sans doute en discuter avec les autres distributions Linux (Debian, Fedora...) pour arrêter de fournir cette bibliothèque.
Utilisez vous mcrypt ? Comprenez vous que vous DEVEZ basculer dès que possible ? ou, au moins, rapporter ce problème au fournisseur des logiciels que vous utilisez.