Bonjour.
Je suis actuellement en train de lire Développement Système sous Linux (4ème édition) de Christophe Blaess et au chapitre 3 il est question d'une faille de la fonction system() permettant d'ouvrir un shell en tant que root si :
- le programme exécutant system() a les droits Set-UID root, (chown root.root exemple-system && chmod +s exemple-system)
- le PATH est mis en priorité sur le répertoire courant (PATH=./:$PATH)
- et un script ouvrant un shell se fait passer pour le programme devant être exécuté par system() (par exemple ls).
J'ai réussi à changer le PATH, le faux script ls ainsi que le programme d'exemple sont déjà fournis (voir fin du post) et j'ai rajouté le bit Set-UID au programme d'exemple en tant que root. Lorsque j'exécute le programme en tant qu'utilisateur normal, j'obtiens un shell mais la commande whoami m'indique que je ne suis pas root mais l'utilisateur normal.
J'ai essayé en créant un nouvel utilisateur normal (sans aucun droit admin) mais ça fait pareil.
J'utilise la dernière version stable de Fedora x64 comme distribution. Est-ce qu'il est possible que la faille soit dorénavant corrigée (mais je ne trouve aucune info qui laisserait penser ça, seulement des infos expliquant comment reproduire la faille et qu'il ne faut pas utiliser system()) ? Ou est-ce "simplement" un mécanisme de protection de Fedora qui est à l'oeuvre (si oui, lequel ?) ?
En vous remerciant par avance pour les explications que vous pourrez m'apporter.
Code exemple-system.c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 // ------------------------------------------------------------------ // exemple-system.c // Fichier d'exemple du livre "Developpement Systeme sous Linux" // (C) 2000-2010 - Christophe BLAESS -Christophe.Blaess@Logilin.fr // http://www.logilin.fr // ------------------------------------------------------------------ #include <stdio.h> #include <stdlib.h> int main (void) { system("ls"); return 0; }
Code pseudo-ls : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #! /bin/sh # ------------------------------------------------------------------ # ls # Fichier d'exemple du livre "Developpement Systeme sous Linux" # (C) 2000-2011 - Christophe BLAESS -Christophe.Blaess@Logilin.fr # http://www.logilin.fr # ------------------------------------------------------------------ echo faux ls echo qui lance un shell sh
Partager