Quais são os problemas de segurança e condições de corrida no uso de 'find -exec'?

13

Na find man page :

-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 isso significa? Por que existem condições de corrida com a execução do diretório inicial? E como são esses riscos de segurança?

    
por Danny Tuppeny 03.04.2016 / 10:06

2 respostas

13

Encontrou os detalhes aqui :

The -exec action causes another program to be run. It passes to the program the name of the file which is being considered at the time. The invoked program will typically then perform some action on that file. Once again, there is a race condition which can be exploited here. We shall take as a specific example the command

 find /tmp -path /tmp/umsp/passwd -exec /bin/rm

In this simple example, we are identifying just one file to be deleted and invoking /bin/rm to delete it. A problem exists because there is a time gap between the point where find decides that it needs to process the -exec action and the point where the /bin/rm command actually issues the unlink() system call to delete the file from the filesystem. Within this time period, an attacker can rename the /tmp/umsp directory, replacing it with a symbolic link to /etc. There is no way for /bin/rm to determine that it is working on the same file that find had in mind. Once the symbolic link is in place, the attacker has persuaded find to cause the deletion of the /etc/passwd file, which is not the effect intended by the command which was actually invoked.

Não tenho certeza da probabilidade de alguém poder explorar isso; mas eu acho que tem a resposta!

    
por 03.04.2016 / 10:25
2

Acredito que a razão pela qual -exec seja perigoso é porque se o usuário não especificasse o nome completo e o caminho para o programa a ser executado, ele possivelmente executaria o programa errado.

Exemplo:

find /some/path -exec coolprogram

Em /some/path , alguém fez outro coolprogram e envia todos os seus dados para algum ator ruim.

Mas espere, você diz, você não precisa executá-lo como ./coolprogram ? Sim, mas algumas pessoas têm PATH=.:/bin:whatever , que executará o programa no diretório atual.

Isso provavelmente é simplificado, mas acho que pode ser perigoso em alguns casos. Eu tive que solucionar um problema uma vez onde um% zero bytecpio acabou no diretório errado. Isso causou a falha de um programa porque cpio não funcionou porque estava executando o arquivo de zero bytes no diretório.

    
por 03.04.2016 / 15:40