Status
Apple hat Bash-Sicherheitsupdates für Shellshock und verwandte Sicherheitslücken als " OS X bash Update 1.0 " veröffentlicht. Sie können über ein normales Systemupdate für Benutzer von OS X Mountain Lion 10.8.5 oder OS X Mavericks 10.9.5 (im Sicherheitsupdate 2014-005 enthalten ) installiert und auch manuell installiert werden. Offizielle Apple-Fixes sind auch für OS X Lion 10.7.5 und OS X Lion Server 10.7.5 verfügbar, diese sind jedoch nur per manuellem Download verfügbar. Die Sicherheitsupdates sind abhängig von der Betriebssystemversion über verschiedene URLs verfügbar:
(Wenn neue Patches veröffentlicht werden, fügen Sie diese hier ein. Bitte bewahren Sie auch diese vorhandenen als Referenz auf.)
Der Apple-Patch behebt Shellshock und mehrere andere Sicherheitslücken und ist für die meisten Menschen in Ordnung. Die Leute können hier aufhören zu lesen.
JEDOCH hat die Aufmerksamkeit, die durch den Shellshock-Bug auf Bash gelenkt wurde, viele Forscher veranlasst, sich intensiv mit Bash zu beschäftigen, und es werden immer mehr (schwer auszunutzende) Sicherheitslücken gefunden. Wenn Sie sich große Sorgen über die Sicherheit machen (weil Sie möglicherweise OS X Server ausführen, um eine öffentlich zugängliche Website zu hosten), sollten Sie versuchen, mit den Sicherheitsanfälligkeiten und Patches Schritt zu halten, indem Sie die Bash selbst kompilieren. Ansonsten mach dir keine Sorgen.
Achten Sie darauf, dass Apple in Zukunft ein weiteres Update veröffentlicht, um zu verhindern, dass der Staub nachlässt, dass weitere Sicherheitslücken gefunden werden.
Es gibt einen offiziellen Satz von Patches für Bash 3.2, Patches 52, 53 und 54 (die den Bash 4.3-Patches 25, 26 und 27 entsprechen), mit denen sowohl CVE-2014-6271 als auch CVE-2014-7169 behoben werden können. sowie das unten angezeigte "Game Over". Dies wurde von mir getestet ( @alblue ) und der Beitrag wurde entsprechend aktualisiert (und dann wurden zusätzliche Aktualisierungen vorgenommen: siehe Revision 41 für den Beitrag, der bei Patch 54 endet ).
Viele zusätzliche Sicherheitslücken wurden gegen Bash gemeldet. Laut Michal Zalewskis Post, wenn Sie Patch 54 (und vermutlich Apples offiziellen Patch) haben, "hat es keinen Sinn, über den Status dieser einzelnen Bugs nachzudenken, da sie kein Sicherheitsrisiko mehr darstellen sollten:"
CVE-2014-6271 - Original RCE gefunden von Stephane. Korrigiert durch bash43-025 und entsprechende Einträge vom 24. September für andere Versionen.
CVE-2014-7169 - Fehler bei der Dateierstellung / beim Token-Verbrauch, der von Tavis gefunden wurde. Behoben von bash43-026 & co (26. September)
CVE-2014-7186 - Ein Absturz, bei dem Florian und Todd wahrscheinlich mehr als 10 Sekunden Risiko eingegangen sind. Behoben durch bash43-028 & co (1. Oktober).
CVE-2014-7187 - ein nicht abstürzender, wahrscheinlich kein Sicherheitsrisiko durch Florian. Behoben durch bash43-028 & co (1. Oktober).
CVE-2014-6277 - Nicht initialisiertes Speicherproblem, mit ziemlicher Sicherheit RCE von Michal Zalewski. Noch kein spezieller Patch.
CVE-2014-6278 - Befehlseinspritzung RCE gefunden von Michal Zalewski. Noch kein spezieller Patch.
Es wird ziemlich verwirrend. Glücklicherweise hat Chet Ramey, der offizielle Betreuer der Bash, einen CVE für das Patch-Mapping veröffentlicht . Sein Beitrag bezieht sich auf Patches für Bash 4.3. Ich (@OldPro) habe sie in Patches für Bash 3.2 übersetzt, was auch für OS X gilt. Seit diesem Beitrag hat er Patch 57 veröffentlicht, also habe ich Folgendes hinzugefügt:
bash32-052 CVE-2014-6271 2014-09-24
bash32-053 CVE-2014-7169 2014-09-26
bash32-054 exported function namespace change 2014-09-27 ("Game Over")
bash32-055 CVE-2014-7186/CVE-2014-7187 2014-10-01
bash32-056 CVE-2014-6277 2014-10-02
bash32-057 CVE-2014-6278 2014-10-05
Siehe David A. Wheelers Beitrag für eine Zeitleiste und detailliertere Informationen.
@alblue hat über Patch 55 Build-Anweisungen veröffentlicht. Ich (@OldPro) habe die Patches 56 und 57 zu den Anweisungen hinzugefügt, sie jedoch nicht getestet.
Testen auf die ursprüngliche Sicherheitsanfälligkeit
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'
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
hello
Die obige Ausgabe ist ein Beispiel für eine nicht anfällige bash
Version. Wenn Sie das Wort vulnerable
in der Ausgabe dieses Befehls sehen, ist Ihr bash
anfällig und Sie sollten aktualisieren. Im Folgenden finden Sie eine anfällige Version von OS X 10.8.5:
Testen auf die neue Sicherheitsanfälligkeit
Es wurde ein Update auf den Original - Beitrag 3.2.52 und Bash (1) ist nach wie vor anfällig für eine Variation der Verwundbarkeit, definierte in CVE-2014-7169
$ rm -f echo
$ 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'
Thu 25 Sep 2014 08:50:18 BST
Die obige Ausgabe ist ein Beispiel für eine anfällige bash
Version. Wenn Sie ein Datum in der Ausgabe dieses Befehls sehen, ist Ihr bash
anfällig.
Deaktivieren von automatisch importierten Funktionen, um "Game Over" zu verhindern
Die Forscher stellten fest, dass ein Skript, ohne es als Sicherheitsanfälligkeit einzustufen, mithilfe von automatisch importierten Funktionen eine Funktion in einer Subshell hijacken kann:
$ env ls="() { echo 'Game Over'; }" bash -c ls
Game over
Der obige Code auf einem betroffenen System würde Game Over
anstelle der Verzeichnisliste angezeigt, die Sie von erwarten würden ls
. Offensichtlich echo 'Game Over'
könnte durch jeden schändlichen Code, den Sie wollen, ersetzt werden. Dies wurde als "Game Over" -Fehler bekannt.
Vor der Verfügbarkeit von Patch 54 haben sowohl NetBSD als auch FreeBSD die Bash-Funktionen für den automatischen Import standardmäßig deaktiviert, teilweise um "Game Over" zu verhindern, hauptsächlich aber, um weitere Fehler im Parser (wie CVE-2014-7169 ) so wie sie waren zu enthalten weiterhin entdeckt und ein neues Kommandozeilen-Flag hinzugefügt--import-functions
um das alte Standardverhalten wieder zu aktivieren. Ich (@alblue) habe einen Patch (gegen 3.2.53) vorbereitet, den andere verwenden können, wenn sie dieses Verhalten ebenfalls übernehmen möchten, und habe ihn unten aufgeführt. Standardmäßig ist dieser Patch im folgenden Build-Skript nicht aktiviert. Ich (@OldPro) halte diesen Patch nicht länger für notwendig oder für eine gute Idee, da er die Abwärtskompatibilität aufhebt und die Schwachstellen, vor denen er schützt, durch Patch 54 und frühere Patches sehr gut behoben werden. Wenn Sie diesen inoffiziellen Patch aktivieren, wird verhindert, dass zukünftige Patches angewendet werden .
(Hinweis für fragende Redakteure; bitte aktivieren Sie dies nicht standardmäßig, da es sich um einen inoffiziellen Patch handelt.)
a0c5c4d66742fddd0a35001cb91798a5fbf8a2f5 import_functions.patch
Der Patch kann aktiviert werden, indem er ausgeführt wird, export ADD_IMPORT_FUNCTIONS_PATCH=YES
bevor der Build ausgeführt wird. Beachten Sie, dass das Aktivieren dieses Patches Patch 54 und alle zukünftigen Patches deaktiviert, da nicht garantiert werden kann, dass zukünftige Patches mit dem inoffiziellen Patch kompatibel sind.
Apple Patch hat eine Art Game Over-Schwachstelle
Wie von @ake_____ auf Twitter hervorgehoben, ist der offizielle Apple-Patch immer noch anfällig für das Aussterben von ausführbaren Dateien in der Umgebung:
$ env '__BASH_FUNC<ls>()'="() { echo Game Over; }" bash -c ls
Game Over
Der Benutzer sollte selbst entscheiden, wie wichtig dies ist. Ich (@OldPro) denke, es gibt keinen Grund zur Sorge, da für dieses Verhalten kein Exploit bekannt ist (es wurde nicht einmal eine CVE-ID vergeben), da unprivilegierte entfernte Angreifer im Allgemeinen nicht den Namen einer Umgebungsvariablen festlegen können und Angreifer mit Berechtigungen dies nicht können Verwenden Sie dies, um Berechtigungen zu erlangen, die sie noch nicht haben (zumindest nicht ohne eine zusätzliche Sicherheitsanfälligkeit auszunutzen).
Um ein wenig Hintergrund zu bieten, können Sie mit bash Funktionen definieren und diese Funktionen über den export -f
Befehl in Subshells exportieren . Dies wurde früher implementiert, indem eine Umgebungsvariable mit demselben Namen wie die Funktion erstellt wurde, deren Wert auf die Funktionsdefinition gesetzt wurde. Damit
$ ls () { echo 'Game Over'; }
$ export -f ls
$ echo $ls
Game Over
Dies geschah, weil export -f ls
eine Umgebungsvariable namens erstellt wurde ls
. Die "Game Over" -Anfälligkeit bestand darin, dass Sie diese Umgebungsvariable direkt erstellen konnten, ohne zuvor die Funktion definieren zu müssen. Wenn Sie also den richtigen Variablennamen eingeben konnten, konnten Sie einen Befehl missbrauchen. Apple hat versucht, dieses Problem zu beheben, indem es schwierig war, eine Variable mit dem richtigen Namen zu erstellen. Der offizielle Bash-Patch 54 macht es tatsächlich unmöglich, eine Variable mit dem richtigen Namen zu erstellen, indem Variablennamen verwendet werden, %
die ein Zeichen enthalten, das in einem Variablennamen nicht zulässig ist, wodurch exportierte Funktionsdefinitionen effektiv in einen anderen reservierten Namespace verschoben werden.
Wenn Ihnen keines der oben genannten Dinge Sinn macht, machen Sie sich darüber keine Sorgen. Der Apple-Patch ist vorerst in Ordnung.
System-Binärdateien
OS X 10.9.5 (die aktuellste stabile Version) wird mit Bash v3.2.51 ausgeliefert:
$ bash --version
GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.
Sie können Bash wie folgt beziehen und neu kompilieren , sofern Sie Xcode installiert haben (und xcodebuild
mindestens einmal ausgeführt haben, um die Lizenz zu akzeptieren):
$ # If you want to disable auto-imported functions, uncomment the following
$ # export ADD_IMPORT_FUNCTIONS_PATCH=YES
$ mkdir bash-fix
$ cd bash-fix
$ curl https://opensource.apple.com/tarballs/bash/bash-92.tar.gz | tar zxf -
$ cd bash-92/bash-3.2
$ curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-052 | patch -p0
$ curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-053 | patch -p0
$ # See note above about ADD_IMPORT_FUNCTIONS_PATCH
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] && curl http://alblue.bandlem.com/import_functions.patch | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-054 | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-055 | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-056 | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-057 | patch -p0
$ cd ..
$ # Note: DO NOT ADD SUDO TO XCODEBUILD HERE
$ xcodebuild
$ build/Release/bash --version # GNU bash, version 3.2.57-release
$ build/Release/sh --version # GNU bash, version 3.2.57-release
$ sudo cp /bin/bash /bin/bash.old
$ sudo cp /bin/sh /bin/sh.old
$ sudo cp build/Release/bash /bin
$ sudo cp build/Release/sh /bin
(Hinweis: Sie können dies ausführen, indem Sie den obigen Codeblock kopieren und einfügen, in Terminal gehen und dann ausführen pbpaste | cut -c 2- | sh
. Seien Sie jedoch immer vorsichtig, wenn Sie zufällige Skripte aus dem Internet ausführen ...)
Danach sollte die Bash-Version v3.2.57 sein:
$ bash --version
GNU bash, version 3.2.57-release (x86_64-apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.
Aus Sicherheitsgründen und nach dem Testen empfehle ich, chmod -x
die alten Versionen zu verwenden, um sicherzustellen, dass sie nicht wiederverwendet werden, oder sie auf eine Sicherungssite zu verschieben.
$ sudo chmod a-x /bin/bash.old /bin/sh.old
Andere Antworten bieten Lösungen für Benutzer von MacPorts oder Homebrew. Diese beheben das Problem nicht, sondern installieren lediglich zusätzliche Versionen von Bash. Bitte lesen Sie diese Antworten, wenn Sie diese speziell aktualisieren möchten.
Vielen Dank
Vielen Dank an Chet, der sich um Bash kümmert und diese Patches zur Verfügung stellt. Vielen Dank an alle anderen, die dies kommentiert und im Laufe der Zeit verbessert haben.
Jetzt hat Apple das echte Update veröffentlicht, obwohl dies immer noch nützlich sein könnte. Da sie nur ein Update für Lion und höher veröffentlicht haben und der offizielle Patch GNU Bash, Version 3.2.53 (1), zur Verfügung stellt (x86_64-apple-darwin13), ist der Game-Over-Bug immer noch etwas anfällig. Zu diesem Zeitpunkt ist es wahrscheinlich sicherer, eine eigene Version von Bash gegen 3.2.57 wiederherzustellen, als sich auf Apples Patch zu verlassen, es sei denn, Sie machen etwas falsch.