Linux: Escalade de privilège avec la variable PATH

PATH est une variable d'environnement qui est utilisée sur Linux pour indiquer au système où se trouvent les exécutables des commandes.

Le PATH est un enchaînement de répertoire séparés par des ":"

Quand un utilisateur tape une commande le système va regarder si l'exécutable de cette commande est contenue dans les répertoires indiqués par le PATH.

Par exemple quand un utilisateur tape la commande "ls" le système va regarder si il existe un exécutable appelé "ls" dans le premier répertoire du PATH.

Si le système ne trouve pas d'exécutable correspondant il passe au second répertoire du PATH ect... Précision importante, si le système trouve un exécutable il arrête sa recherche et l'exécute. Autrement dit, c'est le premier exécutable trouvé qui est exécuté. .Si aucun exécutable est trouvé le terminal affiche que la commande est introuvable.

Ce mécanisme peut poser un problème de sécurité. Voici un exemple de programme vulnérable:

L'exécutable root_me a un suid bit donc si un utilisateur lance cet exécutable il aura les droits du propriétaire du fichier. Il se trouve que le propriétaire du fichier est root... Intéressant. Le but va être d'avoir un shell avec les droits root.

On peut également voir le code de l'application, cette application affiche le fichier "/etc/passwd" via la commande "cat":

En pratique tout fonctionne:

On va créer un faux exécutable nommée "cat" que l'on va placer dans /tmp. Cet exécutable va lancer bash:

Il faut ensuite modifier le PATH pour que notre faux exécutable "cat" soit utilisé si la commande "cat" est exécutée:

Il nous reste plus qu'à exécuter root_me. Cette application va appeler (avec les droits root) notre fichier cat qui va lancer /bin/bash et donc nous faire spawn un shell 🙂

Et voilà!
Pour éviter cette faille il faut remplacer la commande cat du programme par son chemin absolu (/usr/bin/cat)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *