PATH में tilde (~) खतरनाक हो सकता है
मूल शीर्षक: The tilde in your PATH may not be your HOME
यह क्यों महत्वपूर्ण है
यह गलती लाखों developers के shell config में है और local privilege escalation का रास्ता खोल सकती है।
Shell config में quoted tilde (~) $HOME में नहीं बदलता। ~/.bashrc में export PATH="$PATH:~/.local/bin/" लिखने पर PATH में /home/user के बजाय ./~/.local/bin/ जुड़ जाता है, जो security जोखिम है।
Disconnect3d के ब्लॉग पर प्रकाशित तकनीकी विश्लेषण के अनुसार, nono agent sandboxing tool ने एक चेतावनी दी — "PATH entries the sandbox can write to: ~/.local/bin/"। जाँच में पता चला कि quoted string के अंदर tilde (~) का expansion $HOME में नहीं होता। Bash documentation स्पष्ट करता है कि tilde expansion केवल unquoted input में होती है, या variable assignment में = और : के तुरंत बाद।
इसका मतलब यह है कि export PATH="$PATH:~/.local/bin/" लिखने पर PATH में literal ./~/.local/bin/ जुड़ता है। यह एक वास्तविक directory बन सकती है जिसे कोई भी write कर सके। Demonstration में एक C program compile करके ./~/.local/bin/kek रखा गया और वह execute हो गया — $HOME कभी involve नहीं हुआ।
Unquoted version export PATH=$PATH:~/.local/bin Bash और Zsh में काम करता है, लेकिन whitespace होने पर यह टूट जाता है, इसलिए यह तरीका भरोसेमंद नहीं। सही तरीका है: export PATH="$PATH:$HOME/.local/bin/"। अपनी PATH जाँचने के लिए echo "$PATH" | tr ':' '\n' | grep '~' command चलाएँ — कुछ print हो तो .bashrc या .zshrc तुरंत ठीक करें।