Betrifft der Shellshock-Fehler ZSH?


38

Betrifft der Shellshock Bash-Fehler ZSH?

Ist ein Upgrade von Bash die einzige Lösung?


Laut dieser Antwort exportiert ZSH auf einer anderen Vermittlungsstelle keine Funktionen. Da der Shellshock-Fehler durch diese bash-spezifische Funktion verursacht wurde, sollten andere Shells, denen er fehlt, wahrscheinlich nicht betroffen sein.
29.

Antworten:


36

Nein, ZSH ist davon nicht betroffen.

Sie MÜSSEN Bash immer noch aktualisieren, da die meisten Systemskripte für Bash geschrieben und für den Shellshock-Fehler anfällig sind.

So testen Sie Ihren ZSH:

env x='() { :;}; echo vulnerable' zsh -c 'echo hello'

Was genau macht dieser Code?

  1. env x='() { :;}; echo vulnerable' Erstellt eine Umgebungsvariable mit bekanntem Fehler mit dem Befehl am Ende der Variablen
  2. zsh -c 'echo hello'Startet die ZSH-Shell mit einem einfachen Hallo (und wertet alle Umgebungsvariablen einschließlich x aus )

Wenn Sie eine Ausgabe sehen:

vulnerable
hello

Dann ist Ihr ZSH verwundbar. Meins (5.0.2) ist nicht:

$ env x='() { :;}; echo vulnerable' zsh -c 'echo hello'
hello

1
Wenn wir zsh benutzen, haben wir aber immer noch Bash in unserem System! Müssen wir uns darüber Sorgen machen? wenn nicht warum?
Dineshkumar

16
@Dineshkumar: ja, du solltest dir noch Sorgen machen & patchen. Der Grund ist, dass auch wenn Sie zsh verwenden, andere Programme (dhcp wurde erwähnt, viele PHP-Anwendungen werden wahrscheinlich funktionieren und viele andere Programme und Skripte auf einem typischen Linux-Computer) weiterhin bash aufrufen. (Eigentlich sollten sie es nicht, aber es ist eine schlechte Angewohnheit geworden.)
Hans_Meine

2
@stephenmurdoch Ubuntu 10.10 ist ziemlich alt und wird seit über 2 Jahren nicht mehr unterstützt ...
Izkata

2
@ Ghanaima: Anrufe bashsind eine schlechte Angewohnheit für Systemdienstprogramme, da die Installation von bash nicht garantiert ist. /bin/shist die Standard-Shell und muss ein korrekter POSIX-Shell-Interpreter sein.
Phord

2
fwiw - Wenn bash als / bin / sh ausgeführt wird, wird es als POSIX-kompatible Shell ausgeführt. In diesem Modus hat es jedoch auch den Bug. env x='() { :;}; echo vulnerable' sh -c 'echo hello'
Phord

6

Über diesen Link :

Sie können feststellen, ob Sie für das ursprüngliche Problem in CVE-2014-6271 anfällig sind, indem Sie diesen Test ausführen:

env x='() { :;}; echo vulnerable' bash -c 'echo hello'

Wenn Sie das Wort vulnerable in der Ausgabe dieses Befehls sehen, ist Ihre Bash anfällig und Sie sollten aktualisieren. Im Folgenden finden Sie eine anfällige Version von OS X 10.8.5:

env x='() { :;}; echo vulnerable' bash -c 'echo hello'
vulnerable
hello

Die folgende Ausgabe ist ein Beispiel für eine nicht anfällige Bash-Version.

$ env x='() { :;}; echo vulnerable' bash -c 'echo hello'
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
hello

Beachten Sie auch, dass zshell beim Patchen von bash gemäß den Anweisungen auf dem Link nicht mehr anfällig ist, weshalb ich denke, dass zshell bash im Kern verwendet.
Vektorgröße

9
Beachten Sie, dass es eine Folgemaßnahme gegeben hat : env X='() { (a)=>\' bash -c "echo date"Wird auf einer gepatchten Bash und trotz vieler Fehler eine Datei mit dem Namen erzeugen, echodie das Datum enthält. Ich will nicht wissen warum.
Jonas Schäfer

@Jonas Warten Sie, produzieren Sie eine Datei ?! Ich verstehe die Verwundbarkeit, aber das ist nur bizarr.
Türknauf

5
@vectorsize zshwird im Kern nicht verwendet bash. bashwird in Ihren Beispielen explizit genannt. Es spielt keine Rolle, mit welcher Shell Sie diese Zeilen ausführen. Diese Sicherheitsanfälligkeit betrifft die neu gestartete Bash-Shell und nicht die Shell, von der aus sie ausgeführt wird.
Adaephon

2
@Adaephon Also man möchte bashin den Beispielen durch ersetzen $SHELL.
Jonas Schäfer

6

Die Binärdatei ist nicht betroffen

Dies wirkt sich nicht auf zshdie ausführbare Shell-Datei aus, da der Quellcode nie den Fehler enthielt.
Es gibt viele Ähnlichkeiten zwischen bashund zsh, aber sie wurden unabhängig voneinander implementiert. Dasselbe Feature wird auf zwei verschiedene Arten implementiert, und - was in diesem Zusammenhang noch wichtiger ist - normalerweise mit unterschiedlichen Fehlern.

Aber die interaktive Nutzung ist

Indirekt wirkt sich dies zshfast genauso auf die interaktive Arbeit mit der Shell in einem Terminal aus wie auf die Arbeit mit bash.

Die Verwendung von bashist einfach so üblich, dass man es kaum vermeiden kann, es zu nennen.

Zu viele Verwendungen, um sie zu vermeiden

  • Skripte, die Sie kennen und erwarten zsh, aber tatsächlich enthalten bash.
  • Viele Shell-Skripte, #!/bin/bashdie bashals Interpreter verwendet werden.
  • Viele Befehle, von denen Sie annehmen, dass sie Binärdateien sind, aber Shell-Skripte, von denen einige verwenden bash.

  • An vielen Stellen, an denen eine Shell explizit ausgeführt wird, bashkann sie verwendet werden und ist möglicherweise erforderlich.

    • wie komplexe xargsBefehle oder gitAliase mit Argumenten
    • Standard-Shells von Terminal-Emulatoren
    • Shell von Benutzern, die Sie sudo
    • etc.

4

Nein, Shellshock wirkt sich nicht direkt auf zsh aus.

In vielen Umgebungen, in denen zsh als Standardshell verwendet wird, ist jedoch auch bash installiert. Jede Shell, einschließlich zsh, kann verwendet werden, um eine kompromittierte Bash-Shell zu erzeugen:

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

Um sich dagegen zu wehren, sollten Sie redundante Versionen von bash patchen, deinstallieren oder deaktivieren. Sie können die Bash-Installation des Systems deaktivieren mit chmod:

$ chmod a-x /bin/bash

Es ist jedoch üblich, dass Skripte Bash explizit aufrufen. Skripte, die dies tun, und solche, die bash-spezifische Skriptfunktionen verwenden, schlagen fehl, wenn bash nicht verfügbar ist. Patchen ist die beste Lösung.


Es scheint, dass zsh Bash implizit für " importing function definition" verwendet. Ich habe es auch mit SSH-Server-Injection getestet: ssh testuser@localhost '() { :;}; echo "$SHELL"'wo ich die testuserLogin-Shell auf /bin/zsh/bin/zsh
setze
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.