Le tilde dans PATH : piège de sécurité shell
Original : The tilde in your PATH may not be your HOME
Pourquoi c'est important
Des milliers de configs shell populaires contiennent silencieusement cette erreur.
Utiliser ~ entre guillemets dans la variable PATH (ex. "$PATH:~/.local/bin") n'étend pas le tilde vers $HOME, mais crée un chemin relatif ./~/.local/bin/, exploitable par un attaquant local.
Un billet publié par le chercheur Disconnect3d expose un comportement mal connu de Bash et Zsh : le tilde (~) n'est expansé vers le répertoire personnel que s'il n'est pas entre guillemets. Résultat : la ligne courante dans beaucoup de fichiers .bashrc ou .zshrc — export PATH="$PATH:~/.local/bin/" — ajoute silencieusement ./~/.local/bin/ au PATH au lieu de /home/<user>/.local/bin/.
Le danger est concret. Un attaquant disposant d'un accès en écriture au répertoire courant peut créer l'arborescence ./~/.local/bin/ et y placer un binaire malveillant portant le nom d'une commande courante. Bash le trouvera en priorité si ce chemin précède les répertoires système dans PATH.
La démonstration est simple : l'auteur compile un binaire kek, le place dans ./~/.local/bin/ et l'exécute via PATH="~/.local/bin/" kek — le binaire tourne sans jamais toucher au vrai $HOME.
La correction est immédiate : remplacer ~ par $HOME dans toute affectation entre guillemets. La version non quotée (export PATH=$PATH:~/.local/bin) fonctionne, car Bash et Zsh expansent le tilde après = et après chaque :, mais elle reste fragile — un espace suffit à casser l'assignation.
Pour vérifier son propre système : echo "$PATH" | tr ':' '\n' | grep '~'. Tout résultat positif indique un PATH à corriger dans .bashrc, .zshrc ou .profile.