Aller au contenu

PATH : Variable d'environnement des chemins de recherche des commandes (nom, pas un sigle)

Sécurité

PATH : nom d'une variable d'environnement, de l'anglais « path », chemin, et non un sigle. « La liste ordonnée des dossiers où le système cherche un programme quand on l'appelle par son seul nom », par analogie avec l'annuaire qu'on consulte de haut en bas : le premier « Dupont » trouvé reçoit l'appel, même si ce n'est pas le bon et surtout s'il s'est inscrit en tête exprès.

Fonctionnement : Sur les systèmes de type UNIX, PATH contient des dossiers séparés par des deux-points, par exemple « /usr/local/bin:/usr/bin:/bin ». Une commande appelée sans chemin, comme « ls », est exécutée depuis le premier dossier de la liste qui en contient une. Sous Windows, la variable porte le même nom, avec des points-virgules, et le dossier courant est en plus consulté dans certains cas.

Détournement : Un programme privilégié, par exemple un binaire SUID (Set User ID, qui s'exécute avec les droits de son propriétaire, souvent root), qui lance une commande sans chemin absolu hérite du PATH choisi par l'utilisateur qui l'appelle. Il suffit à celui-ci de placer en tête un dossier contenant un faux « ls » pour le faire exécuter avec les privilèges du programme : l'attaquant ne force aucune porte, il se contente de modifier la liste des invités.

Parades : Appeler les commandes par leur chemin absolu dans tout code privilégié, réinitialiser l'environnement avant d'exécuter un sous-programme (sudo le fait avec son paramètre secure_path), ne jamais mettre le dossier courant « . » ni un dossier modifiable par d'autres dans le PATH d'un compte administrateur.

Ce qui arrive si on s'en passe

Un script ou un binaire qui s'exécute en root et appelle « tar », « cp » ou « service » sans chemin absolu donne à tout utilisateur local capable de choisir son environnement le moyen d'exécuter son propre code avec les droits du système. Le même résultat s'obtient si un dossier du PATH de root est modifiable par un compte ordinaire : il suffit d'y déposer un programme portant le nom d'une commande courante et d'attendre qu'un administrateur la tape. L'élévation de privilège qui en résulte ne laisse presque aucune trace, puisque c'est le système lui-même qui a lancé le programme piégé.

Explication de la marmotte

Quand on tape une commande comme « ls » dans un terminal, l'ordinateur doit trouver le programme correspondant. La variable PATH lui donne une liste de dossiers à fouiller, dans l'ordre, et il lance le premier programme qui porte ce nom. Si un attaquant réussit à placer un faux programme dans un dossier situé en début de liste, c'est le sien qui sera lancé. C'est dangereux quand le programme qui fait l'appel possède des droits d'administrateur, car le faux programme les reçoit aussi.

Où ce terme est utilisé

← Tout le glossaire