(Priv Esc) Exploitation des binaires SUID

To the non-french speaker, note that you can translate the articles using the Google Trad widget situated at the bottom of all pages.


Sous Linux (comme sous Windows) nous avons la possibilité de modifier les droits d’accès à un fichier via la commande :

chmod

Les droits les plus connus sont :

-(r)ead : j’autorise la lecture
-(w)rite : j’autorise l’écriture
-e(x)ecute : j’autorise l’exécution

Seulement voilà, il existe d’autres types de droits un peu plus particulier dont le fameux droit SUID ! Qu’est ce que ça veut dire un « binaire ayant les droits SUID » ? En fait c’est tout simple, ça veut simplement dire que le binaire sera exécuté avec les droits d’exécution du propriétaire.

Il peut arriver que des administrateurs systèmes décident de donner à certains binaires les droits SUID (alors que le fichier est détenu par root) afin de faciliter l’utilisation du système. Le problème c’est que certains d’entre eux peuvent poser de gros problèmes.

Parmi eux on retrouve : nmap, vim, man, tar, python, tcpdump etc… Cherchez sur Internet, vous en trouverez pleins d’autres.

Alors pourquoi est ce que c’est dangereux de donner les droits SUID sur ces binaires ? Eh bien prenons le cas de vim. Vim est un éditeur de texte bien connu et très utilisé par les développeurs (en parti grâce à ses raccourcis clavier bien foutus).

Comme vous pouvez le voir, le binaire vim est détenu par root :

1.png

Par conséquent si je lui donne les droits SUID via cette commande :

chmod a+s /usr/bin/vim

Alors quand je vais lancer vim (avec mon utilisateur non privilégié), je vais lancer le binaire avec les droits root. Le souci, c’est qu’avec Vim on peut lancer des commandes shell.

Pour cela il suffira de taper ceci :

:!'votre commande'

Par exemple pour un whoami on entrera cette commande :

:!whoami

Ce qui nous donnera ce résultat :

2.png

Du coup si à la place du !whoami je mets :

!/bin/bash -p

je vais obtenir un shell avec les droits root :

3.png

Je suis donc passé de simple utilisateur à utilisateur root et ce en moins de 2 minutes. Conclusion, faites attention avec les scripts SUID. Si possible n’utilisez pas de SUID, privilégiez l’utilisateur du fichier sudoers qui vous permettra de dire qui a le droit de faire quoi sur votre système.


Dans la suite de cet article je vais lister l’ensemble des scripts qui, s’ils ont les droits SUID, ou sont accessibles via un défaut de configuration sudo pourront mener à une escalade de privilège.

  • Vim :

Voir la première partie de l’article

  • Python :

5.png

  • Tar :

J’ai souvent trouvé, sur des CTF’s, des scripts bash qui faisaient des backups de fichiers via tar en utilisant cette commande :

tar archive.tar *

Pourquoi c’est une mauvaise idée ? Eh bien tout simplement car tar propose deux arguments :

1.png

Ces deux arguments vont, normalement, nous permettre de vérifier le bon cours de la création de l’archive et en même nous permettre de lancer des commandes à la volée. Le problème, c’est que justement on va pouvoir exécuter des commandes.

Autrement dit si l’utilisateur root lance la commande tar sur un répertoire sur lequel un utilisateur de base peut écrire… Eh bien il y aura priv esc. Tout ce que vous avez à faire, c’est créé trois fichiers :

2.png

Au moment ou l’utilisateur root va venir créer l’archive, il va au final lancer cette commande :

tar archive.tar --checkpoint=1 --checkpoint-action=sh privesc.sh

Ce qui va avoir pour conséquences de faire pop un shell root.

(Je mettrais à jour cet article quand j’en aurais le temps 😉)

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s