Betrifft der Shellshock Bash-Fehler ZSH?
Ist ein Upgrade von Bash die einzige Lösung?
Betrifft der Shellshock Bash-Fehler ZSH?
Ist ein Upgrade von Bash die einzige Lösung?
Antworten:
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?
env x='() { :;}; echo vulnerable' Erstellt eine Umgebungsvariable mit bekanntem Fehler mit dem Befehl am Ende der Variablenzsh -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
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.
env x='() { :;}; echo vulnerable' sh -c 'echo hello'
Ü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
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.
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.
bashin den Beispielen durch ersetzen $SHELL.
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.
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.
zsh, aber tatsächlich enthalten bash. #!/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.
xargsBefehle oder gitAliase mit ArgumentenNein, 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.
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