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
bash
jest złym nawykiem dla narzędzi systemowych, ponieważ nie można zagwarantować, że bash zostanie zainstalowany; /bin/sh
jest 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 echo
zawierającej datę. Nie chcę wiedzieć dlaczego.
zsh
ma nie wykorzystywać bash
w swej istocie. bash
jest 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.
bash
w przykładach chcielibyśmy zastąpić $SHELL
.
Nie wpływa to zsh
na wykonywalność powłoki, ponieważ jej kod źródłowy nigdy nie zawierał błędu.
Istnieje wiele podobieństw między bash
i 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 zsh
powłoką w terminalu prawie tak samo, jak z nią współpracuje bash
.
Używanie bash
jest tak powszechne, że trudno jest go nie nazwać.
zsh
, ale faktycznie zawierają bash
. #!/bin/bash
określają bash
jako 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, bash
mogą być używane i ewentualnie wymagane.
xargs
komendy lub git
aliasy 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 testuser
powłokę logowania na /bin/zsh
, i echo/bin/zsh