Со find
страницы руководства :
-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.
Что это значит? Почему существуют гонки с запуском из стартового каталога? И как эти риски безопасности?
Ответы:
Подробности нашел здесь :
Не уверен, с какой вероятностью кто-нибудь сможет это использовать; но я думаю, что есть ответ!
источник
execdir
если сначала выполнить chdir,/tmp/umsp
прежде чем запускать команду, и, теоретически, повторная ссылка на каталог у злоумышленника не будет иметь никакого эффекта… если повторное связывание произойдет после того, как find «решит» оценить,-exec
но до того, какrm
команда сможет выполнить свою работу. Но мне интересно, почему это может иметь значение: злоумышленник может просто выполнить повторную ссылку после того, как пользователь решил написатьfind
команду./tmp/umsp
является каталогом, когдаfind
видит его, но приrm
запуске атакованный изменил его на символическую ссылку на/etc
./tmp/umsp/passwd
это обычный файл, но не один и тот же.Я считаю, что причина, по которой
-exec
это опасно, заключается в том, что, если пользователь не укажет полное имя и путь к программе, которая будет выполняться, он потенциально может выполнить не ту программу.Пример:
В
/some/path
, кто-то сделал другойcoolprogram
, и он загружает все ваши данные какому-то плохому актеру.Но подождите, вы говорите, вы не должны выполнять это как
./coolprogram
? Да, но есть людиPATH=.:/bin:whatever
, которые выполнят программу в текущем каталоге.Это, вероятно, упрощено, но я думаю, что в некоторых случаях это может быть опасно. Однажды мне пришлось устранить проблему, когда нулевой байт
cpio
оказался в неправильном каталоге. Это вызвало сбой программы, потому чтоcpio
он не работал, так как выполнял файл нулевого байта в каталоге.источник
find -exec
. Если вы указали.
свой путь, то просто выполнениеcoolprogram
в текущем каталоге уже опасно, используете ли выfind
это или нет!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.
.
в пути и{}
в команде. Возможно, в будущем Linux просто запретит.
путь, и инструментам не нужно будет реализовывать свои собственные проверки безопасности! :)