Desde la findpágina del 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.
¿Qué significa esto? ¿Por qué hay condiciones de carrera al ejecutarlo desde el directorio inicial? ¿Y cómo son estos riesgos de seguridad?

Respuestas:
Encontré los detalles aquí :
No estoy seguro de la probabilidad de que alguien pueda explotar esto; pero supongo que ahí está la respuesta!
fuente
execdirprimero sería chdir a/tmp/umspantes de ejecutar el comando, y por lo tanto, en teoría, un atacante volver a vincular el directorio no tendría ningún efecto ... si la vinculación se produce después de encontrar "decide" evaluar-execpero antes de que elrmcomando pueda hacer su trabajo. Pero me pregunto por qué esto marcaría la diferencia: el atacante podría simplemente volver a vincular después de que el usuario haya decidido escribir elfindcomando./tmp/umspes un directorio cuando lofindve, pero cuando sermejecuta, el atacado lo ha cambiado a un enlace simbólico/etc./tmp/umsp/passwdes un archivo regular todo el tiempo, pero no el mismo.Creo que la razón por la cual
-execes peligroso es porque si el usuario no especificara el nombre completo y la ruta al programa que se ejecutará, potencialmente ejecutaría el programa incorrecto.Ejemplo:
En
/some/path, alguien hizo otrocoolprogram, y carga todos tus datos a algún mal actor.Pero espera, dices, ¿no tienes que ejecutarlo como
./coolprogram? Sí, pero algunas personas síPATH=.:/bin:whatever, que ejecutarán el programa en el directorio actual.Esto probablemente se simplifica, pero creo que podría ser peligroso en algunos casos. Tuve que solucionar un problema una vez donde un byte cero
cpioterminó en el directorio incorrecto. Causó un bloqueo del programa porquecpiono funcionaba ya que ejecutaba el archivo de cero bytes en el directorio.fuente
find -exec. Si ha puesto.en su camino, simplemente ejecutarcoolprogramen su directorio actual ya es peligroso, ¡ya sea que lofindhaga o no!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..en la ruta y{}en el comando. ¡Quizás en el futuro Linux prohibirá.completamente el camino y las herramientas no necesitarán implementar sus propios controles de seguridad! :)