Ce n’était qu’un vendredi soir comme les autres apparemment. On finit l’après-midi par un devoir de java de 2h bouclé en 25 minutes puis en route vers Rennes pour la permanence de Gulliver. J’arrive évidement en avance sans les clés… Heureusement, la femme de ménage me laisse entrer dans le bâtiment sans aucune vérifications.
La permanence débute comme d’habitude, on parle de tout et de rien. Dans mon coin, je travail sur mon projet tuteuré. Ce soir, j’ai décidé d’automatiser l’installation de mysql-server-5.0 pour mon projet tuteuré :
apt-get install mysql-server-5.0
Debconf demande alors deux fois un mot de passe pour administrer la bdd et l’installation se termine. Pour automatiser cette tache, il faut indiquer à l’avance à debconf le mot de passe. On récupère la configuration via la commande :
satan:~# debconf-get-selections |head
# for internal use only
user-setup passwd/root-password-crypted password
# Phrase secrète :
uswsusp uswsusp/RSA_passphrase password
# Mot de passe du superutilisateur (« root ») :
user-setup passwd/root-password password
# Confirmation du mot de passe du superutilisateur de MySQL :
mysql-server-5.0 mysql-server/root_password_again password bonjour
# Mot de passe pour le nouvel utilisateur :
user-setup passwd/user-password password
Surprise !
Bienvenue dans le monde des mots de passe en clair dans /var/cache/debconf/passwords.dat
satan:~# cat /var/cache/debconf/passwords.dat |head -n 11
Name: mysql-server/root_password
Template: mysql-server/root_password
Value:
Owners: mysql-server-5.0
Flags: seen
Name: mysql-server/root_password_again
Template: mysql-server/root_password_again
Value: bonjour
Owners: mysql-server-5.0
Flags: seen
Serait-ce un « petit » oubli de la part du packager de mysql ? Allons fouiller dans les sources :
set_mysql_rootpw() {
# forget we ever saw the password. don't use reset to keep the seen status
db_set mysql-server/root_password ""
tfile=`mktemp`
if [ ! -f "$tfile" ]; then
return 1
fi
Le mot de passe est bien effacé mais le root_password_again ne l’est pas. Tout content de ma trouvaille, je m’imagine déjà à écrire mon premier CVE. Petite vérification quand même :
-rw------- 1 root root 1588 jan 25 01:19 passwords.dat
Un bugreport avec une severité normal suffira. Je fais le petit patch à l’arrache histoire de :
Index: debian/mysql-server-5.0.postinst
===================================================================
--- debian/mysql-server-5.0.postinst (rÃ(c)vision 1391)
+++ debian/mysql-server-5.0.postinst (copie de travail)
@@ -28,7 +28,8 @@
set_mysql_rootpw() {
# forget we ever saw the password. don't use reset to keep the
seen status
db_set mysql-server/root_password ""
-
+ db_set mysql-server/root_password_again ""
+
tfile=`mktemp`
if [ ! -f "$tfile" ]; then
return 1
Par curiosité, remontons dans le temps :
- 28 septembre 2006, rev 606 : On demande le mot de passe à l’installation ;
- 3 jours plus tard, rev 612 : On se dit que ça peut être sympa d’effacer le mot de passe du cache ;
- 20 mars 2008 : Les gens chez Ubuntu au Perou, ils aiment bien taper deux fois le mot de passe, alors ils proposent un patch ;
- 10 jours plus tard, rev 1189 : Le patch une fois bien testé est integré.
- 9 mois passes et
Hier soir (le 11 Dec 2008 05:25:34 +0100 dans ma VM d’après le bugreport…), je me décide enfin à poster le bug report #513262. 2h heures plus tard, un mainteneur corrige.
Je n’ai pas fourni mon patch car je ne l’avais même pas testé. Je regrette car il n’y avait bien qu’une ligne à changer.
Promis, la prochaine fois, je teste et j’envoie mon patch.