Beeinflusst der Shellshock-Fehler ZSH?

8249
marflar

Beeinflusst der Shellshock Bash-Fehler ZSH?

Ist das Upgrade von Bash die einzige Lösung?

38
Laut [diese Antwort] (http://unix.stackexchange.com/a/59431/81612) an einer anderen Börse exportiert ZSH keine Funktionen. Da der Shellshock-Fehler durch dieses spezielle Feature verursacht wurde, sollten andere Shells, denen es fehlt, wahrscheinlich nicht betroffen sein. lzam vor 9 Jahren 0

4 Antworten auf die Frage

36
mente

Nein, es wirkt sich nicht auf ZSH aus.

Sie MÜSSEN bash immer noch aktualisieren, da die meisten Systemskripts für bash geschrieben werden und anfällig für den Shellshock-Bug 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 Ausgabe sehen:

vulnerable hello 

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

$ env x='() { :;}; echo vulnerable' zsh -c 'echo hello' hello 
Danke vielmals. Ich habe festgestellt, dass meine Ubunutu 10.10-Computer alle verwundbar sind, aber mein Centos 6.4 ist nicht ... marflar vor 9 Jahren 0
wenn wir zsh verwenden, haben wir trotzdem bash in unserem system! Müssen wir uns darüber Sorgen machen? wenn nicht warum? Dineshkumar vor 9 Jahren 1
@ Dineshkumar: ja, du solltest dich immer noch sorgen und flicken. Der Grund ist, dass selbst wenn * Sie * zsh verwenden, andere Programme (dhcp wurde erwähnt, wahrscheinlich werden viele PHP-Anwendungen dies tun und viele andere Programme und Skripte auf einem typischen Linux-Computer) immer noch bash aufrufen. (In der Tat sollten sie nicht, aber es ist eine schlechte Angewohnheit geworden.) hans_meine vor 9 Jahren 16
@ hans_meine, warum ist es eine schlechte Angewohnheit? Wenn Sie ein Skript schreiben, das beispielsweise eine spezielle Syntax / Funktion einer bestimmten Shell verwendet, wäre es nicht unangemessen, "#! / Bin / sh" anstelle des Interpreters aufzurufen, für den Ihr Skript gedacht ist. Ghanima vor 9 Jahren 0
@stephenmurdoch Ubuntu 10.10 ist ziemlich alt und wird seit über 2 Jahren nicht mehr unterstützt ... Izkata vor 9 Jahren 2
@Ghanima: Das Aufrufen von "bash" ist eine schlechte Angewohnheit für Systemdienstprogramme, da nicht garantiert ist, dass bash installiert wird. `/ bin / sh` ist die Standard-Shell und muss ein korrekter POSIX-Shell-Interpreter sein. phord vor 9 Jahren 2
@ phord, sicher in Bezug auf System-Utils, aber wenn ich ein Script schreiben würde, das auf einigen Eigenheiten von `bash` basiert (was man als schlechte Angewohnheit bezeichnen könnte), wäre es doch klug, 'bash' als Interpreter zu bezeichnen und nicht `/ bin / sh`. Ghanima vor 9 Jahren 0
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 Fehler. `env x = '() {:;}; Echo anfällig 'sh -c' Echo hallo`` phord vor 9 Jahren 2
Ich denke auch, dass es sich lohnt, irgendwo darauf hinzuweisen, dass es durchaus möglich ist, dass zsh * verschiedene * Schwachstellen hat, die in Zukunft möglicherweise erkannt werden. lindes-hw vor 9 Jahren 0
@ lindes-hw Es ist durchaus möglich, dass für jede Software die gleichen oder verschiedene Schwachstellen bestehen, die in der Zukunft möglicherweise identifiziert werden. OJFord vor 9 Jahren 0
@Ghanima Ich habe mit bash eine "schlechte Angewohnheit" genannt, weil oft die Verwendung von / bin / sh und die * eingeschränkten POSIX-Shell-Features * (kein Shellshock) völlig ausreichen würden und Skripts auch auf Systemen mit Nicht-Bash-Shells funktionieren würden. Viele Leute sind in dieser Hinsicht nachlässig und gehen einfach von einem "Standard-Linux-System" mit bash aus. Zweitens würde ich immer versuchen, andere Programme direkt aufzurufen, anstatt die Shell zu durchlaufen. Oft wird die Shell unnötig verwendet (zB von PHP oder Python), um ein externes Programm aufzurufen ("Befehl ausführen"), wenn es viel sicherer wäre, nicht durch die Shell zu gehen. hans_meine vor 9 Jahren 1
@ phord Vielen Dank für den Hinweis, dass bash auch den Shellshock-Fehler enthält, wenn er im POSIX-Modus aufgerufen wird. Ich hoffte es nicht (hätte aber keine Wette platziert ;-)). hans_meine vor 9 Jahren 0
@OllieFord: Ja, das war genau der Punkt, an dem ich versuchen wollte. Im Grunde wollte ich sicherstellen, dass diese Antwort nicht als "Nein, zsh ist nicht anfällig für Angriffe" interpretiert wird, sondern als "Nein, zsh hat diese besondere Schwachstelle nicht". lindes-hw vor 9 Jahren 0
6
vectorsize

Von diesem Link :

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

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

Wenn Sie das Wort in der Ausgabe dieses Befehls als anfällig betrachten, ist Ihre Bash anfällig und sollten Sie aktualisieren. Unten ist 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 mit den Anweisungen auf dem Link nicht mehr verwundbar ist. Dies lässt mich denken, dass zshell im Kern bash verwendet. vectorsize vor 9 Jahren 0
Beachten Sie, dass es eine [Nachverfolgung] gegeben hat (https://twitter.com/taviso/status/514887394294652929): `` env X = '() {(a) => \' bash -c "Echodatum" `` wird auf einer gepatchten Bash und trotz vieler Fehler eine Datei namens `` echo`` erzeugen, die das Datum enthält. Ich will nicht wissen warum. Jonas Schäfer vor 9 Jahren 9
@Jonas Wartet, erzeugt eine * Datei * ?! Ich verstehe die Schwachstelle, aber das ist nur bizarr. Doorknob vor 9 Jahren 0
@Doorknob Meine Vermutung ist (ich habe mir keinen Code oder Patches angeschaut), der Parser behält einen gewissen Status, wenn in der defekten Funktionsdefinition Fehler in der Umgebungsvariablen auftreten. Das> und das \ (oder ihre Bedeutung) scheinen also erhalten zu bleiben. Das \ scheint etwas zu entkommen, also läuft es darauf hinaus, ``> echo date`` auszuführen. [Siehe auch diesen oss-security-Beitrag] (http://www.openwall.com/lists/oss-security/2014/09/24/40) Jonas Schäfer vor 9 Jahren 0
@vectorsize `zsh` verwendet * bash nicht im Kern. "bash" wird in Ihren Beispielen explizit genannt. Es ist egal, welche Shell Sie verwenden, um diese Zeilen auszuführen. Diese Sicherheitsanfälligkeit betrifft die neu gestartete Bash-Shell, nicht die Shell, von der sie ausgeführt wird. Adaephon vor 9 Jahren 5
@Adaephon Man möchte also `` bash`` in den Beispielen durch `` $ SHELL`` ersetzen. Jonas Schäfer vor 9 Jahren 2
@adaephon natürlich !! du hast recht, wie dumm von mir ^^ vectorsize vor 9 Jahren 0
6
Volker Siegel

Die Binärdatei ist nicht betroffen

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

Aber die interaktive Verwendung ist

Indirekt beeinflusst es das Arbeiten mit der zshShell in einem Terminal fast so sehr wie das Arbeiten mit bash.

Die Verwendung von bashist so verbreitet, dass man es kaum vermeiden kann, es zu nennen.

Zu viele Anwendungen 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, sind jedoch Shell-Skripts, von denen einige sie 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, die Argumente enthalten
    • Standardhüllen von Terminalemulatoren
    • Shell von Benutzern, denen Sie Sudo hinzufügen
    • usw.
4
joews

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 dies zu verhindern, sollten Sie alle redundanten Versionen von bash patchen, deinstallieren oder deaktivieren. Sie können die System-Bash-Installation deaktivieren chmod:

$ chmod a-x /bin/bash 

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

es scheint, dass zsh implizit bash für "importing function definition" verwendet? Ich habe auch mit ssh-server injection getestet: `ssh testuser @ localhost '() {:;}; echo "$ SHELL" '`wo ich die Login-Shell von` testuser' auf `/ bin / zsh` gesetzt habe, und es gibt` / bin / zsh` wieder Bossliaw vor 9 Jahren 0