Un bug ravageur dans le client Linux de Steam

Par:
fredericmazue

mer, 21/01/2015 - 15:01

Le bug est expliqué sur une page de bit-tech.net, repéré par notre confrère Clubic Une discussion est lancée à ce sujet sur Git Hub.

Il est des bugs plus ou moins gênants. Celui-là fait vraiment très mal. Il se situe dans le script steam.sh, script d'installation du client Steam sous Linux. Le script propose l'option --reset-steam que l'on peut utiliser pour réinitialiser le client.

Le problème est que cela peut aboutir à l'effacement de tous vos fichiers utilisateur au moins, voire à la destruction complète du système !

En effet le script contient cette ligne :

rm -rf "$STEAMROOT/"*

qui efface le répertoire dans lequel est installé le client. Le problème est que la variable STEAMROOT n'est pas testée. Si celle-ci est vide, la commande devient

rm -rf "/"*

Ce qui efface tous les fichiers à partir de la racine du système. Concrètement cela touche tous les fichiers sur lesquels vous avez les droits, ce qui correspond au minimum à tous les fichiers de votre répertoire utilisateur. Si vous avez les droits sur d'autres fichiers situés ailleurs, ceux-ci passent à la trappe également.

Si vous travaillez en root (ce qu'il ne faudra jamais faire sous Linux, n'est-ce pas ?), votre système entier est détruit :-)

rm -rf est une commande qui n'a pas du tout bonne presse chez les administrateurs Linux expérimentés, qu'ils évitent soigneusement d'utiliser en général.  Ceux-ci savent en outre que le joker * ne devrait JAMAIS être donné dans une commande rm -rf. Les administrateurs système travaillant en général sous root, ils savent qu'il vaut mieux faire attention, les conséquences de la moindre erreur étant beaucoup trop graves :-)

Bref, le script steam.sh n'est pas programmé de la manière la plus propre qui soit. Un correctif devrait être publié rapidement.

Commentaires

Une bonne pratqiue aurait évité ce bug. En "sh" ou en "bash" les options "set -eu" ou mieux encore le "shebang" (en entête du script) "#!/bin/sh -eu" auraient détectés la variable STREAMROOT comme non initialisée (effet du "-u") et auraient provoqués immédiatement la sortie du script (effet du "-e").