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
bash
sind eine schlechte Angewohnheit für Systemdienstprogramme, da die Installation von bash nicht garantiert ist. /bin/sh
ist 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, echo
die das Datum enthält. Ich will nicht wissen warum.
zsh
wird im Kern nicht verwendet bash
. bash
wird 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.
bash
in den Beispielen durch ersetzen $SHELL
.
Dies wirkt sich nicht auf zsh
die ausführbare Shell-Datei aus, da der Quellcode nie den Fehler enthielt.
Es gibt viele Ähnlichkeiten zwischen bash
und 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 zsh
fast genauso auf die interaktive Arbeit mit der Shell in einem Terminal aus wie auf die Arbeit mit bash
.
Die Verwendung von bash
ist einfach so üblich, dass man es kaum vermeiden kann, es zu nennen.
zsh
, aber tatsächlich enthalten bash
. #!/bin/bash
die bash
als 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, bash
kann sie verwendet werden und ist möglicherweise erforderlich.
xargs
Befehle oder git
Aliase 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 testuser
Login-Shell auf /bin/zsh
/bin/zsh