Czy błąd Shellshock wpływa na ZSH?

38

Czy błąd Shellshock Bash wpływa na ZSH?

Czy aktualizacja Bash jest jedynym rozwiązaniem?

marflar
źródło
zgodnie z tą odpowiedzią na innej giełdzie ZSH nie eksportuje funkcji. Ponieważ błąd Shellshock został spowodowany przez tę funkcję specyficzną dla bash, inne powłoki, które go nie mają, prawdopodobnie nie powinny zostać naruszone.
lzam

Odpowiedzi:

36

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?

  1. env x='() { :;}; echo vulnerable' tworzy zmienną środowiskową ze znanym błędem za pomocą polecenia na końcu zmiennej
  2. zsh -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
mente
źródło
1
jeśli używamy zsh, ale nadal mamy bash w naszym systemie! czy musimy się tym martwić? jeśli nie to dlaczego?
Dineshkumar
16
@Dineshkumar: tak, nadal powinieneś się martwić i załatać. Powodem jest to, że nawet jeśli ty używasz zsh inne programy (DHCP wspomniano, wiele aplikacji PHP będzie prawdopodobnie zrobić i wiele innych programów i skryptów na typowym komputerze z systemem Linux) będzie nadal nazywają bash. (W rzeczywistości nie powinni, ale stało się to złym nawykiem.)
hans_meine
2
@stephenmurdoch Ubuntu 10.10 jest dość stary i nie jest obsługiwany przez ponad 2 lata ...
Izkata
2
@Ghanima: wywoływanie 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.
phord
2
fwiw - Gdy bash jest uruchamiany jako / bin / sh, działa jako powłoka kompatybilna z POSIX. W tym trybie ma jednak również błąd. env x='() { :;}; echo vulnerable' sh -c 'echo hello'
phord
6

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
wektory wielkości
źródło
Zauważ też, że podczas łatania bash postępując zgodnie z instrukcjami na linku, zshell przestał być podatny na atak, co sprawia, że ​​myślę, że zshell używa bash jako jądra.
wektory wielkości
9
Zwróć uwagę, że nastąpiła kontynuacja : 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.
Jonas Schäfer
@Jonas Czekaj, wyprodukować plik ? Rozumiem tę lukę, ale to po prostu dziwne.
Klamka
5
@vectorsize 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.
Adaephon
2
@Adaephon Więc bashw przykładach chcielibyśmy zastąpić $SHELL.
Jonas Schäfer,
6

Binarny nie ma wpływu

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.

Ale interaktywne zastosowanie jest

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ć.

Zbyt wiele zastosowań, aby uniknąć

  • skrypty, które znasz i spodziewasz się użyć zsh, ale faktycznie zawierają bash.
  • wiele skryptów powłoki, które #!/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.

    • jak złożone xargskomendy lub gitaliasy zawierające argumenty
    • domyślne powłoki emulatorów terminali
    • powłoka użytkowników, do których sudo
    • itp.
Volker Siegel
źródło
4

Nie, 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.

joews
źródło
wydaje się, że zsh domyślnie używa bash dla „ 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
Bossliaw