Na find
página do manual :
-exec command ; There are unavoidable security problems surrounding use of the -exec action; you should use the -execdir option instead. -execdir command {} + Like -exec, but the specified command is run from the subdirectory containing the matched file, which is not normally the directory in which you started find. This a much more secure method for invoking commands, as it avoids race conditions during resolution of the paths to the matched files.
O que isto significa? Por que existem condições de corrida com a execução no diretório inicial? E como são esses riscos à segurança?
Respostas:
Encontre os detalhes aqui :
Não tenho certeza da probabilidade de alguém poder explorar isso; mas acho que há a resposta!
fonte
execdir
o primeiro seria chdir/tmp/umsp
antes de executar o comando e, portanto, teoricamente, um atacante vincular novamente o diretório não teria efeito. Se a vinculação ocorrida depois de encontrar "decide" avaliar,-exec
mas antes que orm
comando possa fazer seu trabalho. Mas me pergunto por que isso faria diferença: o invasor pode simplesmente fazer a vinculação novamente depois que o usuário decidir escrever ofind
comando./tmp/umsp
é um diretório quando ofind
visualiza, mas quandorm
executado, o atacado o transformou em um link simbólico para/etc
./tmp/umsp/passwd
é um arquivo regular o tempo todo, mas não o mesmo.Acredito que a razão pela qual
-exec
é perigoso é porque, se o usuário não especificar o nome completo e o caminho para o programa a ser executado, ele potencialmente executará o programa errado.Exemplo:
Em
/some/path
, alguém fez outrocoolprogram
, e ele carrega todos os seus dados para algum ator ruim.Mas espere, você diz, não precisa executá-lo como
./coolprogram
? Sim, mas algumas pessoas têmPATH=.:/bin:whatever
, que executará o programa no diretório atual.Provavelmente isso é simplificado, mas acho que pode ser perigoso em alguns casos. Eu tive que solucionar um problema uma vez em que um byte zero
cpio
terminasse no diretório errado. Isso causou uma falha no programa porquecpio
não funcionava, pois estava executando o arquivo de byte zero no diretório.fonte
find -exec
. Se você colocou.
no seu caminho, basta executarcoolprogram
no seu diretório atual já é perigoso, quer você ofind
faça ou não!The ‘-execdir’ action refuses to do anything if the current directory is included in the $PATH environment variable. This is necessary because ‘-execdir’ runs programs in the same directory in which it finds files – in general, such a directory might be writable by untrusted users. For similar reasons, ‘-execdir’ does not allow ‘{}’ to appear in the name of the command to be run.
.
no caminho e{}
no comando. Talvez no futuro o Linux apenas proíba.
totalmente o caminho e as ferramentas não precisem implementar suas próprias verificações de segurança! :)