Wie kann ich testen, ob mein Server für den ShellShock-Fehler anfällig ist?

80

Wie kann ich sicherstellen, dass meine Bash-Installation nach den Updates nicht mehr für den ShellShock- Fehler anfällig ist ?

Giovanni Tirloni
quelle
Bitte beachten Sie, dass zwei weitere Sicherheitslücken in bash noch nicht gepatcht sind (CVE-2014-7186 und CVE-2014-7187).
Deer Hunter
Patches zur Korrektur von CVE-2014-7186 und CVE-2014-7187 sind nicht lange nach der Veröffentlichung seines Kommentars durch Deer Hunter verfügbar. Wenn Sie einen von der Distribution bereitgestellten Patch für CVE-2014-7169 haben, haben Sie möglicherweise bereits genug, um 7186/7187 zu blockieren, testen Sie Ihr System mit den folgenden Befehlen und sehen Sie. Suchen Sie auch nach weiteren Sicherheitsupdates für Ihre Distribution.
BeowulfNode42

Antworten:

83

Um die CVE-2014-6271-Sicherheitsanfälligkeit zu überprüfen

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

Es sollte NICHT das Wort "verwundbar" wiedergeben.


So suchen Sie nach der CVE-2014-7169-Sicherheitsanfälligkeit
(Warnung: Wenn Ihre Sicherheitsanfälligkeit fehlschlägt, wird eine Datei mit dem Namen erstellt oder überschrieben /tmp/echo, die Sie nach dem Löschen löschen können, und die vor dem erneuten Testen gelöscht werden muss)

cd /tmp; env X='() { (a)=>\' bash -c "echo date"; cat echo

es sollte das wort datum sagen und sich dann mit einer nachricht wie beschweren cat: echo: No such file or directory. Wenn stattdessen die aktuelle Datums- und Uhrzeitangabe angezeigt wird, ist Ihr System anfällig.


Überprüfung auf CVE-2014-7186

bash -c 'true <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF' || echo "CVE-2014-7186 vulnerable, redir_stack"

Es sollte den Text NICHT wiedergeben CVE-2014-7186 vulnerable, redir_stack.


Überprüfung auf CVE-2014-7187

(for x in {1..200} ; do echo "for x$x in ; do :"; done; for x in {1..200} ; do echo done ; done) | bash || echo "CVE-2014-7187 vulnerable, word_lineno"

Es sollte den Text NICHT wiedergeben CVE-2014-7187 vulnerable, word_lineno.


Überprüfung auf CVE-2014-6277. Ich bin mir da nicht 100% sicher, da es auf einem teilweise gepatchten System zu beruhen scheint, auf das ich keinen Zugriff mehr habe.

env HTTP_COOKIE="() { x() { _; }; x() { _; } <<`perl -e '{print "A"x1000}'`; }" bash -c "echo testing CVE-2014-6277"

Als Ergebnis wird NUR der Text zurückgesendet testing CVE-2014-6277. Wenn es Perl ausführt oder sich beschwert, dass Perl nicht installiert ist, ist das definitiv ein Fehler. Ich bin mir bei keinem anderen Ausfallverhalten sicher, da ich keine ungepatchten Systeme mehr habe.


Überprüfung auf CVE-2014-6278. Auch hier bin ich mir nicht hundertprozentig sicher, ob dieser Test erfolgreich ist, da ich keine ungepatchten Systeme mehr habe.

env HTTP_COOKIE='() { _; } >_[$($())] { echo hi mom; id; }' bash -c "echo testing CVE-2014-6278"

Ein Bestehen für diesen Test ist, dass er NUR den Text wiedergibt testing CVE-2014-6278. Wenn Sie hi momirgendwohin zurückkehren, ist das definitiv ein Fehlschlag.

BeowulfNode42
quelle
1
Können wir den allgemeinen Test hinzufügen foo='() { echo not patched; }' bash -c foo? Solange die Funktionsexporte nicht in einem separaten Namespace abgelegt werden, hören wir nicht auf, von einem Parser-Fehler zum nächsten zu laufen.
Billyw
Hat dieser Test einen CVE? Haben Sie Referenzen, um dieses Problem zu beschreiben? Diese Art von Informationen kann auch zu einer der anderen Fragen zu Shellshock gehören, da es sich bei dieser Frage darum handelt, wie der Erfolg oder Misserfolg vorhandener Patches getestet werden kann.
BeowulfNode42
Das ist aus Michal Zalewskis Blogpost auf einigen kommenden Shellshock CVEs ( lcamtuf.blogspot.com/2014/09/… ). Es ist sein empfohlener Test für CVE-2014-6278, der immer noch nicht öffentlich ist. Anscheinend habe ich mich in Bezug auf die Allgemeinheit des Tests geirrt. Ich bin bereits auf einen Fall gestoßen, in dem Zalewskis Test bestanden wurde, der CVE-2014-7187-Test jedoch fehlgeschlagen ist.
Billyw
Und hier ist die vollständige Offenlegung von CVE-2014-6277 und CVE-2014-6278 zusammen mit den Befehlen, nach ihnen zu suchen
billyw
Ein Hinweis: Auch wenn die Version von BASH anfällig ist, wird sie von niemandem verwendet (dh alle von Daemons verwendeten Konten wie "www" oder "cups" oder was auch immer) und keiner von ihnen ist mit BASH als Standardshell konfiguriert Ihr Code ruft system () oder ähnliches auf. Die anfällige Version ist möglicherweise weniger riskant. Aktualisieren Sie BASH jedoch so schnell wie möglich.
DTK
32

Exportieren Sie eine speziell gestaltete Umgebungsvariable, die von anfälligen Versionen von Bash automatisch ausgewertet wird:

$ export testbug='() { :;}; echo VULNERABLE'

Führen Sie nun ein einfaches Echo aus, um festzustellen, ob Bash den Code in $ testbug auswertet, obwohl Sie diese Variable nicht selbst verwendet haben:

$ bash -c "echo Hello"
VULNERABLE
Hello

Wenn die Zeichenfolge "VULNERABLE" angezeigt wird, liegt die Antwort auf der Hand. Ansonsten brauchen Sie sich keine Sorgen zu machen und Ihre gepatchte Version von Bash ist in Ordnung.

Bitte beachten Sie, dass mehrere Patches von den großen Linux-Distributionen veröffentlicht wurden und manchmal die Sicherheitsanfälligkeit nicht vollständig beheben. Überprüfen Sie weiterhin die Sicherheitshinweise und den CVE-Eintrag für diesen Fehler.

Giovanni Tirloni
quelle
5
Zusätzlich zu CVE-2014-6271 hat insbesondere die unvollständige Korrektur von Red Hat eine eigene, die ebenfalls beachtet werden muss : CVE-2014-7169 .
DocMax
3
Einzeiler, der Ihre Shell-Umgebung nicht verschmutzt und auch dann funktioniert, wenn Sie eine alternative Anmeldeshell verwenden (von der Sie möglicherweise nichts wissen export):env testbug='() { :;}; echo VULNERABLE' bash -c "echo Hello"
Lloeki,
1
Es gibt einige Ubuntu-spezifische Details hier askubuntu.com/questions/528101/… - persönlich musste ich ein Upgrade von Ubuntu 13.10 auf 14.04 durchführen, um das Problem zu beheben
dodgy_coder
2

ShellShock ist praktisch eine Verbindung von mehr als einer Sicherheitsanfälligkeit von Bash , und derzeit ist auch nicht bekannt, dass diese Sicherheitsanfälligkeit ausgenutzt wird. ShellShock kann also ein noch offenes Problem sein. Es gibt einen Thread mit Updates von RedHat zu diesem Problem .

Redhat empfiehlt Folgendes:

Führen Sie den Befehl aus:

$ env 'x=() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c "echo test"

Wenn die Ausgabe lautet:

$ env 'x=() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c "echo test"
vulnerable
bash: BASH_FUNC_x(): line 0: syntax error near unexpected token `)'
bash: BASH_FUNC_x(): line 0: `BASH_FUNC_x() () { :;}; echo vulnerable'
bash: error importing function definition for `BASH_FUNC_x'
test

Sie haben keine Lösung.

Wenn die Ausgabe lautet:

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

Sie haben CVE-2014-6271fix

Wenn Ihre Ausgabe ist:

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

du bist nicht verletzlich

Der andere Teil der ShellShock-Prüfung ist die CVE-2014-7169-Sicherheitsanfälligkeitsprüfung, die sicherstellt, dass das System vor dem Problem der Dateierstellung geschützt ist. Führen Sie den folgenden Befehl aus, um zu testen, ob Ihre Version von Bash für CVE-2014-7169 anfällig ist:

$ cd /tmp; rm -f /tmp/echo; env 'x=() { (a)=>\' bash -c "echo date"; cat /tmp/echo
bash: x: line 1: syntax error near unexpected token `='
bash: x: line 1: `'
bash: error importing function definition for `x'
Fri Sep 26 11:49:58 GMT 2014

Wenn Ihr System anfällig ist, werden Uhrzeit und Datum angezeigt und / tmp / echo wird erstellt.

Wenn Ihr System nicht anfällig ist, wird eine Ausgabe ähnlich der folgenden angezeigt:

$ cd /tmp; rm -f /tmp/echo; env 'x=() { (a)=>\' bash -c "echo date"; cat /tmp/echo
date
cat: /tmp/echo: No such file or directory
Eduard Florinescu
quelle
2

Ich habe ein CLI-Dienstprogramm namens ShellShocker geschrieben , um Ihren Webserver auf Schwachstellen in CGI-Skripten zu testen. Um Ihre Site zu testen, führen Sie Folgendes aus:

python shellshocker.py <your-server-address>/<cgi-script-path>

dh

python shellshocker.py http://example.com/cgi-bin/possibly-vulnerable-script.cgi

BEARBEITEN: Dieses Dienstprogramm wurde entfernt, sorry: '(

Liam Marshall
quelle
Dein Link ist tot
SSK
@SSK Sorry;) Tippfehler.
Liam Marshall
Ihr Link ist immer noch tot.
Mxx
Ja, sorry, ich habe es runtergenommen. Es wurde auf eine Weise ausgenutzt, die mir nicht gefiel.
Liam Marshall
1

Sie können Ihre CGI-URL bei diesem Online-Test einreichen:

http://shellshock.iecra.org

user245089
quelle
4
Gründe für Abstimmungen sind höflich.
David
4
"Wir protokollieren alle Scans" ??? Gruselig. Ich würde die Python herunterladen und selbst ausführen.
Brad
1
@ Brad zumindest sagen sie dir. Ich bin sicher, dass ich, wenn ich einen Whitehat-Sicherheitsdienst anbiete, der diesen Dienst anbietet, möglicherweise ein Protokoll (wenn nur ein Zähler ohne individuelle Details) darüber führen würde, wie viele Personen blind ihre Site-Details in eine Website eingegeben haben, die angab, dass sie läuft Um einen Penetrationstest zu versuchen, ohne viel über die Echtheit der Website zu wissen, die den Test anbietet ... und um ein Protokoll darüber zu erhalten, wer was getestet hat, falls jemand seinen Service genutzt hat, um auch gefährdete Websites anderer zu finden ...
Rob Moir
-1

Typ env x = '() {:;}; echo vulnerable 'bash -c "echo dies ist ein Test" und wenn dies eine Sicherheitslücke ergibt und dies ein Test ist, bedeutet dies, dass Ihr OSX / Linux-Rechner betroffen ist. Abhilfe schafft ein Update auf die neueste Version von bash.

Hen-Al
quelle
6
Warum als root? Völlig unnötig.
Mat