Le vendredi 26 septembre, p.karatchentzeff@??? a écrit :
> > Si ton script commence par "#!/bin/sh" et qu'il est exécutable, tu n'as
> > pas besoin d'invoquer /bin/sh dans l'appel de system. Tu peux écrire
> >
> > system("/home/jabber/cmd.sh $argumentsh");
>
> Si l'on ne vérifie pas le PATH *avant* de lancer ta commande, le
> bin/sh peut-être n'importe quoi...
bin/sh peut être n'importe quoi, mais si je ne m'abuse, /bin/sh (avec un
/ au début) ne peut être que /bin/sh. Donc si le script commence par
"#!/bin/sh" je ne vois pas où est le problème. Et s'il commence par
"#!bin/sh" (drôle d'idée) ça ne marche pas.
> et donc on peut ainsi ouvrir une faille dans le système.
Où ça ? C'est la même personne qui écrit le script shell et le script
php qui appelle le script shell. Tu penses au cas où l'attaquant
pourrait modifier les variables d'environnement du serveur ?
> Sous Perl, on peut lancer l'interpréteur dans un mode
> « d'entachement » qui vérifie ce genre de problème...
$ perl -Te 'system "/home/edgar/cmd.sh"'
Insecure $ENV{PATH} while running with -T switch at -e line 1.
$ perl -Te 'system "/bin/sh /home/edgar/cmd.sh"'
Insecure $ENV{PATH} while running with -T switch at -e line 1.
Visiblement ce n'est pas /bin/sh qui froisse perl -T. À mon avis il ne
regarde même pas le paramètre de system(), il sait juste que system()
peut lancer un shell et il n'aime pas lancer un shell avec un PATH non
contrôlé. C'est pas qu'il a peur de lancer un faux shell, c'est qu'il a
peur de ce que le vrai shell va faire.
Edgar.
--
Edgar Bonet Maison : 04 76 21 29 16 Bureau : 04 76 88 10 96
3 rue Jean Prévost Mobile : 06 77 19 79 39 Fax : 04 76 88 11 91
38000 Grenoble guilde@??? www.edgar-bonet.org