Od find
strony man :
-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.
Co to znaczy? Dlaczego istnieją warunki wyścigu z uruchomieniem go z katalogu startowego? A jakie są te zagrożenia bezpieczeństwa?
Odpowiedzi:
Znalazłem szczegóły tutaj :
Nie jestem pewien, jak prawdopodobne jest, że ktokolwiek mógłby to wykorzystać; ale chyba jest odpowiedź!
źródło
execdir
najpierw/tmp/umsp
uruchomiłby chdir przed uruchomieniem polecenia, a więc teoretycznie, atakujący ponownie podłączając katalog nie miałby żadnego skutku .. jeśli ponowne połączenie nastąpiło po znalezieniu „decyduje” o ocenie,-exec
ale zanimrm
polecenie może wykonać swoją pracę. Zastanawiam się jednak, dlaczego miałoby to mieć znaczenie: atakujący może po prostu wykonać ponowne połączenie po tym, jak użytkownik zdecyduje się napisaćfind
polecenie./tmp/umsp
jest katalogiem, gdyfind
go widzi, ale porm
uruchomieniu zaatakowany zmienił go na symboliczny link do/etc
./tmp/umsp/passwd
przez cały czas jest zwykłym plikiem, ale nie tym samym.Uważam, że powodem, dla którego
-exec
jest niebezpieczny, jest to, że jeśli użytkownik nie określi pełnej nazwy i ścieżki do programu, który ma zostać wykonany, potencjalnie wykona niewłaściwy program.Przykład:
W
/some/path
, ktoś zrobił innycoolprogram
, i to przesyła wszystkie twoje dane do jakiegoś złego aktora.Ale poczekaj, mówisz, czy nie musisz go wykonywać jako
./coolprogram
? Tak, ale niektórzy mająPATH=.:/bin:whatever
, co spowoduje uruchomienie programu w bieżącym katalogu.Jest to prawdopodobnie uproszczone, ale myślę, że w niektórych przypadkach może być niebezpieczne. Musiałem raz rozwiązać problem, w którym zero bajtów
cpio
znalazło się w niewłaściwym katalogu. Spowodowało to awarię programu, ponieważcpio
nie działał, ponieważ działał plik zero bajtów w katalogu.źródło
find -exec
. Jeśli postawiłeś.
na swojej ścieżce, po prostu wykonaniecoolprogram
w bieżącym katalogu jest już niebezpieczne, niezależnie od tego, czy używaszfind
tego, czy nie!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.
.
na ścieżce i{}
w poleceniu. Być może w przyszłości Linux po prostu.
całkowicie zabrania ścieżek i narzędzia nie będą musiały wdrażać własnych kontroli bezpieczeństwa! :)