Możesz uruchomić niewłaściwy program. Ktoś może zmusić cię do uruchomienia ich programu.
The -execdirDziałanie prowadzi swoją komendę z katalogu, który zawiera plik (s) stwierdzono. Gdy $PATHzawiera ścieżki względne, takie jak .cokolwiek, co się nie zaczyna/ , -execdirjest niepewne, ponieważ katalog, w którym znajduje się plik (lub inny katalog rozwiązany względem niego) może również zawierać plik wykonywalny o tej samej nazwie, co ten, którego próbujesz biegać. Ten potencjalnie niezaufany plik wykonywalny zostałby wtedy uruchomiony.
Może to być celowo wykorzystane przez innego użytkownika, aby spowodować uruchomienie jego programu, co może spowodować uszkodzenie lub naruszenie bezpieczeństwa danych, zamiast programu, który próbujesz uruchomić. Lub, rzadziej, może to po prostu spowodować nieumyślne uruchomienie niewłaściwego programu, nawet bez próby spowodowania problemu.
Jeśli wszystko w PATHzmiennej środowiskowej jest ścieżka bezwzględna, ten błąd nie powinien wystąpić, nawet jeśli katalog szukasz i -execdiring z jest zawarty w PATH. (Sprawdziłem, czy to działa.) Jeśli uważasz, że nie masz żadnych katalogów względnych, $PATHale nadal pojawia się ten błąd, zaktualizuj swoje pytanie o szczegóły, w tym dane wyjściowe echo "$PATH".
Konkretny przykład.
Jako przykład tego, co może pójść nie tak, załóżmy:
- Alice ma
.ją, $PATHponieważ chce móc uruchamiać programy w dowolnym katalogu, w którym by się nie znajdowała cd, bez zawracania sobie głowy dodawaniem ich nazwisk ./.
- Wróg Alicji, Ewa, dzielił się
/home/eve/sharedz Alicją.
- Alice chce statystyk (wierszy, słów, bajtów) w
.c plików, które Eve jej udostępniła.
Więc Alice działa:
find ~eve/shared -name \*.c -execdir wc {} \;
Na nieszczęście dla Alicji Eve stworzyła własny skrypt, nazwał go wc, ustawiła jako wykonywalną ( chmod +x) i umieściła go potajemnie w jednym z katalogów /home/eve/shared. Scenariusz Ewy wygląda następująco:
#!/bin/sh
/usr/bin/wc "$@"
do_evil # Eve replaces this command with whatver evil she wishes to do
Więc kiedy zastosowania Alice findz -execdirbiec wcna plikach Ewa jest wspólne, a dojdzie do plików znajdujących się w tym samym katalogu co niestandardowego Ewy wcskryptu, Evewc tras - ze wszystkich przywilejów Alicji!
(Podstępna, Ewa sprawiła, że jej wcskrypt działa jak opakowanie systemu wc, więc Alice nawet nie wie, że coś poszło nie tak, tzn. Żedo_evil zostało uruchomione. Jednak możliwe są prostsze - i bardziej wyrafinowane - warianty. )
Jak findtemu zapobiec.
findzapobiega występowaniu tego problemu bezpieczeństwa, odmawiając podjęcia -execdirdziałania, gdy $PATHzawiera katalog względny.
find oferuje dwa komunikaty diagnostyczne w zależności od konkretnej sytuacji.
Jeśli .jest $PATH, to (jak widzieliście) mówi:
find: The current directory is included in the PATH environment variable, which is insecure in combination with the -execdir action of find. Please remove the current directory from your $PATH (that is, remove "." or leading or trailing colons)
Prawdopodobnie ma specjalny komunikat dla .sprawy, ponieważ jest szczególnie powszechny.
Jeżeli względna ścieżka inna niż .--say, foo--appears w $PATHi uruchomić findz -execdir, to mówi:
find: The relative path `foo' is included in the PATH environment variable, which is insecure in combination with the -execdir action of find. Please remove that entry from $PATH
Lepiej nie mieć ścieżek względnych $PATH .
Ryzyko posiadania .lub innych względnych ścieżek $PATHjest szczególnie zwiększone, gdy używasz narzędzia, które automatycznie zmienia katalog, dlatego findnie pozwalasz na użycie -execdirw tej sytuacji.
Ale posiadanie względnych ścieżek, szczególnie .w twoim, $PATHjest z natury ryzykowne i tak naprawdę najlepiej go unikać. Rozważ sytuację fikcyjną w powyższym przykładzie. Załóżmy, że zamiast biegać find, Alice po prostu cds do ~eve/shared/blahi biegnie wc *.c. Jeśli blahzawiera wcskrypt Eve , do_evildziała jako Alice.