Czy błąd Shellshock Bash wpływa na ZSH?
Czy aktualizacja Bash jest jedynym rozwiązaniem?
Czy błąd Shellshock Bash wpływa na ZSH?
Czy aktualizacja Bash jest jedynym rozwiązaniem?
Odpowiedzi:
Nie, to nie wpływa na ZSH.
Nadal MUSISZ zaktualizować bash, ponieważ większość skryptów systemowych jest napisanych dla bash i jest podatna na błąd shellshock.
Aby przetestować ZSH, wykonaj następujące czynności:
env x='() { :;}; echo vulnerable' zsh -c 'echo hello'
Co dokładnie robi ten kod?
env x='() { :;}; echo vulnerable' tworzy zmienną środowiskową ze znanym błędem za pomocą polecenia na końcu zmiennejzsh -c 'echo hello'uruchamia powłokę ZSH z prostym przywitaniem (i analizuje wszystkie zmienne env, w tym x )Jeśli zobaczysz wynik:
vulnerable
hello
Wtedy twój ZSH jest podatny na ataki. Mój (5.0.2) nie jest:
$ env x='() { :;}; echo vulnerable' zsh -c 'echo hello'
hello
bashjest złym nawykiem dla narzędzi systemowych, ponieważ nie można zagwarantować, że bash zostanie zainstalowany; /bin/shjest standardową powłoką i musi być poprawnym interpretatorem powłoki POSIX.
env x='() { :;}; echo vulnerable' sh -c 'echo hello'
Z tego linku :
Możesz ustalić, czy jesteś podatny na pierwotny problem w CVE-2014-6271, wykonując ten test:
env x='() { :;}; echo vulnerable' bash -c 'echo hello'
Jeśli zobaczysz słowo wrażliwe na wyjściu tego polecenia, twój bash jest wrażliwy i powinieneś zaktualizować. Poniżej znajduje się podatna na atak wersja systemu OS X 10.8.5:
env x='() { :;}; echo vulnerable' bash -c 'echo hello'
vulnerable
hello
Poniższe dane wyjściowe to przykład niezabezpieczonej wersji bash.
$ env x='() { :;}; echo vulnerable' bash -c 'echo hello'
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
hello
env X='() { (a)=>\' bash -c "echo date"po załataniu bashu i pomimo rzucenia wielu błędów, utworzy plik o nazwie echozawierającej datę. Nie chcę wiedzieć dlaczego.
zshma nie wykorzystywać bashw swej istocie. bashjest wyraźnie wywołany w twoich przykładach. Nie ma znaczenia, jakiej powłoki używasz do uruchomienia tych linii. Luka ta dotyczy nowo uruchomionej powłoki bash, a nie powłoki, z której jest uruchamiana.
bashw przykładach chcielibyśmy zastąpić $SHELL.
Nie wpływa to zshna wykonywalność powłoki, ponieważ jej kod źródłowy nigdy nie zawierał błędu.
Istnieje wiele podobieństw między bashi zsh, ale zostały one wdrożone niezależnie od siebie. Ta sama funkcja jest realizowana na dwa różne sposoby i - co ważniejsze w tym kontekście - zwykle z różnymi błędami.
Pośrednio wpływa to na interaktywną pracę z zshpowłoką w terminalu prawie tak samo, jak z nią współpracuje bash.
Używanie bashjest tak powszechne, że trudno jest go nie nazwać.
zsh, ale faktycznie zawierają bash. #!/bin/bashokreślają bashjako interpreter.wiele poleceń, które zakładasz, to pliki binarne, ale skrypty powłoki, niektóre z nich używają bash.
w wielu miejscach, w których powłoka jest wykonywana jawnie, bashmogą być używane i ewentualnie wymagane.
xargskomendy lub gitaliasy zawierające argumentyNie, Shellshock nie wpływa bezpośrednio na zsh.
Jednak w wielu środowiskach, które używają zsh jako domyślnej powłoki, zainstalowano również bash. Każda powłoka, w tym zsh, może zostać użyta do odrodzenia skompromitowanej powłoki bash:
zsh ❯ env X='() { (a)=>\' sh -c "echo date"; cat echo
sh: X: line 1: syntax error near unexpected token `='
sh: X: line 1: `'
sh: error importing function definition for `X'
Fri 26 Sep 2014 12:05:57 BST
Aby się przed tym bronić, należy załatać, odinstalować lub wyłączyć wszelkie zbędne wersje bash. Możesz wyłączyć instalację bash systemu za pomocą chmod:
$ chmod a-x /bin/bash
Jednak skrypty często wywołują bash. Skrypty, które to robią, i te, które używają funkcji skryptowych specyficznych dla bash, przestaną działać, jeśli bash nie jest dostępny. Patchowanie jest najlepszym rozwiązaniem.
importing function definition”? Testowałem również z iniekcją serwera ssh: ssh testuser@localhost '() { :;}; echo "$SHELL"'gdzie ustawiłem testuserpowłokę logowania na /bin/zsh, i echo/bin/zsh