Para quem não sabe, a variável de ambiente PATH é a variável que
armazena os diretórios onde ficam os arquivos executáveis para o
seu usuário, para que você possa dar um ldconfig em lugar de
/sbin/ldconfig, ou seja, te permite suprimir o endereço do arquivo.
A vulnerabilidade está na comodidade, sim, isso mesmo, vamos ao exemplo:
"Você é uma pessoa que costuma instalar muitos programas a partir do source
code e está cansado de ter de dar ./configure, ./nomedoprograma e coisas afins,
então, vai e põe um '.' (ponto) na sua variável PATH, ou seja, agora, sempre
que estiver em um diretório, ele estará no seu PATH, pois o ponto equivale ao
diretório corrente."
Isso parece muito cômodo, não? Porém, se o root, por exemplo, tiver esse ponto
em seu PATH, as coisas complicam... vamos ver o por quê:
Um usuário inescrupuloso vai em /tmp, diretório onde todos têm permissão de escrita
e faz um script simples... chamado "ls" por exemplo, e coloca os seguintes comandos:
#!/bin/sh
ls
chmod 777 /etc/shadow > /dev/null
Você viu? O script "ls" vai dar um ls e vai tentar mudar a permissão de
/etc/shadow para 777, enviando qualquer saída de erro para /dev/null, assim,
o processo foi invisível para o usuário e como um binário no diretório corrente
tem maior precedência do que os outros de mesmo nome... seu sistema ficou beeeem
vulnerável! Mas é claro que o trabalho pode ser melhorado:
[3] Comentário enviado por knowlink em 04/06/2005 - 10:40h
Tá até aí tudo bem, realmente o perigo existe e é comum isto ocorrer, porém podemos controlar isto sem deixar o root com um '.' na $PATH. Segue exemplo:
if [ "`id -u`" != "0" ]; then
PATH=$PATH:.
fi
Assim somente usuarios sem o UID 0 ganharão o diretório corrente incluso no PATH
[5] Comentário enviado por hra em 04/06/2005 - 14:54h
Parabéns Simon,
É esse tipo de informação que tem feito do linux um sistema mais seguro que o "aquele" concorrente das janelas.
A sua idéia é interessante e pode realmente compromoter um computador, mas só complementando:
A sequencia de procura dos diretório dentro da variável PATH é do primeiro pro ultimo, sendo que o executável estando no primeiro diretório o segundo nem será consultado, veja o exemplo:
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:.
No caso do "ls" estando em /bin ele nunca será executado na pasta atual mesmo existindo.
Já se o PATH estiver com o ponto no começo aí é um abraço.
Tomar o root não é assim tão simples, mas é bom ficar atento.
Se eu estiver errado me perdoem e me corrijam por favor.