Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Risques avec instruction open(FIC, $fichier);

2 réponses
Avatar
David LE BOURGEOIS
Bonjour à tous.

Une interrogation me trotte dans la tête depuis un petit moment.
Prenons l'exemple suivant, extrait d'un programme perl :

my ($fichier) = @ARGV;
open(FIC, "tail -10 \"$fichier\" |") or die("blabla");

Ce programme etant autorisé par sudo, si quelque chose du genre 'rm -rf
~root' est passer en parametre, ça peut faire beaucoup de dégâts.
Mon idée est donc d'ajouter avant l'instruction open, un test
d'existence du fichier :

-e $fichier or die("$fichier inexistant\n");

Mais qu'est-ce qui empêche de créer un fichier nommé 'rm -rf ~root', ou
'$(rm -rf ~root)' ?

Je me dis que je pourrais entourrer $fichier de \' au lieu de \". Mais
y a-t-il d'autres risques ?

Merci de répondre à mes inquiétudes, même si je semble un peu parano :-)

--
David LE BOURGEOIS

2 réponses

Avatar
Paul GABORIT
À (at) Thu, 19 Feb 2004 10:55:16 +0100,
David LE BOURGEOIS écrivait (wrote):
Une interrogation me trotte dans la tête depuis un petit moment.
Prenons l'exemple suivant, extrait d'un programme perl :

my ($fichier) = @ARGV;
open(FIC, "tail -10 "$fichier" |") or die("blabla");

Ce programme etant autorisé par sudo, si quelque chose du genre 'rm
-rf ~root' est passer en parametre, ça peut faire beaucoup de dégâts.
Mon idée est donc d'ajouter avant l'instruction open, un test
d'existence du fichier :


Vous avez raison de vous inquiétez... même si l'exemple que vous donnez n'est
pas fonctionnel. En attendant de bien maitriser la chose, je vous conseille
fortement de NE PAS écrire de script ayant les droits 'root' et accessible par
sudo.

Il y a beaucoup d'autres risques (exemple: êtes-vous sûr que la commande
'tail' est bien '/usr/bin/tail' ?). En fait pour sécuriser ce genre
d'appel, il ne faut pas passer par 'open'. Lisez 'perlipc'. Vous y trouverez
plusieurs solutions.

En français :
<http://www.enstimac.fr/Perl/DocFr/perlipc.html>

De manière plus générale, pour appréhender les risques et leur maîtrise en
Perl, un bon début consiste à lire 'perlsec' :

<http://www.enstimac.fr/Perl/DocFr/perlsec.html>

PS: d'autre part, perl peut faire aussi bien que 'tail' mais j'imagine que cet
appel n'était qu'un simple exemple.

--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>

Avatar
David LE BOURGEOIS
À (at) Thu, 19 Feb 2004 10:55:16 +0100,
David LE BOURGEOIS écrivait (wrote):

Une interrogation me trotte dans la tête depuis un petit moment.
Prenons l'exemple suivant, extrait d'un programme perl :

my ($fichier) = @ARGV;
open(FIC, "tail -10 "$fichier" |") or die("blabla");

Ce programme etant autorisé par sudo, si quelque chose du genre 'rm
-rf ~root' est passer en parametre, ça peut faire beaucoup de dégâts.
Mon idée est donc d'ajouter avant l'instruction open, un test
d'existence du fichier :



Vous avez raison de vous inquiétez... même si l'exemple que vous donnez n'est
pas fonctionnel. En attendant de bien maitriser la chose, je vous conseille
fortement de NE PAS écrire de script ayant les droits 'root' et accessible par
sudo.

Il y a beaucoup d'autres risques (exemple: êtes-vous sûr que la commande
'tail' est bien '/usr/bin/tail' ?).


Oui, effectivement, cela présente un risque.

En fait pour sécuriser ce genre
d'appel, il ne faut pas passer par 'open'. Lisez 'perlipc'. Vous y trouverez
plusieurs solutions.

En français :
<http://www.enstimac.fr/Perl/DocFr/perlipc.html>

De manière plus générale, pour appréhender les risques et leur maîtrise en
Perl, un bon début consiste à lire 'perlsec' :

<http://www.enstimac.fr/Perl/DocFr/perlsec.html>


Très bien.
J'avais commencer à lire perlipc, mais juste pour la gestion des signaux.
Je vais donc appronfondir la notion de sécurité.


PS: d'autre part, perl peut faire aussi bien que 'tail' mais j'imagine que cet
appel n'était qu'un simple exemple.



Merci pour ces informations, et à bientôt.

--
David LE BOURGEOIS