$0
pode ser o que o chamador do script quiser. Este é o caminho para o script e o chamador pode fazer uma cópia ou link para o script em qualquer local.
No entanto, isso não é uma vulnerabilidade em si, a menos que o script esteja sendo executado com mais privilégios do que o responsável pela chamada. A menos que o executável do script seja privilegiado, o chamador pode executar um programa diferente. Pode se tornar uma vulnerabilidade se o próprio chamador for privilegiado e puder ser convencido a passar um% diferente% co_de.
Se o script estiver sendo executado com privilégios, o que $0
pode ser depende do método usado para elevar privilégios. Se o script for invocado por meio de um link simbólico para um executável setuid, então $0
pode ser arbitrário (no entanto, a maioria dos sistemas recusa executáveis setuid).
Independentemente da falta de implicação de segurança na maioria dos cenários neste caso específico, o seu script não é totalmente robusto contra o $0
arbitrário. As aspas duplas em $0
fazem com que o valor seja usado como está (enquanto um "$0"
sem aspas o trataria como uma lista de padrões de curingas). Mas quando o comando $0
vê esse valor como um argumento, ele o tratará de maneira diferente, dependendo de o valor começar com basename
. Se o valor começar com -
(e não é apenas -
), então é uma opção. Pelo menos com o GNU -
, um argumento de não-opção é obrigatório, então chamá-lo com um único argumento que começa com basename
resultaria apenas em um erro. Mas . Para lidar com valores arbitrários, incluindo aqueles que começam com -
, coloque -
antes do argumento para indicar que não há mais opções a seguir: --
.