Skip to content

ShellShock - Die Schwachstellen und Angriffsvektoren

In diesem Text finden Sie alle Informationen zur ursprünglichen ShellShock-Schwachstelle und den danach entdeckten weiteren Schwachstellen sowie allen Angriffsvektoren für die ShellShock-Schwachstelle im Überblick (Vorsicht, dieser Text ist lang, ShellShock hat es in sich).

tl;dr: Eine Schwachstelle in der Unix-Shell Bash erlaubt Angreifern das Ausführen beliebiger Befehle über das Internet. "Nebenan" gibt es eine kompakte Zusammenfassung der wichtigsten Informationen.

Die Schwachstellen rund um ShellShock

CVE-2014-6271

Dies ist die eigentliche ShellShock-Schwachstelle, die am 24. September veröffentlicht wurde.

Die Bash kann nicht nur Shell-Variablen, sondern auch Shell-Funktionen über das Environment an (indirekte) Child-Prozesse exportieren. Aktuelle Versionen verwenden dazu eine Environment-Variable mit dem Funktionsnamen als Namen und der mit "() {" beginnenden Funktionsdefinition als Variablenwert. Die Schwachstelle besteht darin, dass die Bash die Auswertung nach der Funktionsdefinition nicht beendet, sondern auf die Funktionsdefinition folgende Shellbefehle parst und ausführt.

Zum Beispiel führt das Setzen der Environment-Variable

  VAR=() { ignored; }; /bin/id

dazu, dass beim Import des Environments in den Bash-Prozess /bin/id ausgeführt wird. Der Prozess befindet sich dabei zwar in einem undefinierten Zustand, zum Beispiel kann es sein dass die PATH-Variable noch nicht gesetzt ist, und unter Umständen stürzt die Shell nach der Ausführung von /bin/id ab, der Schaden ist dann aber bereits eingetreten.

CVE-2014-7169

Im Laufe des 24. Septembers wurde festgestellt, dass der Patch die Schwachstelle nicht vollständig behebt. Die sich dadurch ergebende neue Schwachstelle erhielt die CVE-ID CVE-2014-7169.

CVE-2014-7186 / CVE-2014-7187

Am 25. September wurden zwei weitere Schwachstellen in der Bash entdeckt, die die CVE-IDs CVE-2014-7186 und CVE-2014-7187 erhalten haben und mit der eigentlichen ShellShock-Schwachstelle nichts zu tun haben.

CVE-2014-7186 ist eine Pufferüberlauf-Schwachstelle und CVE-2014-7187 ein Off-by-One-Fehler, beide Schwachstellen können evtl. bei der Auswertung von Eingaben, die eigentlich nicht zum Ausführen von Code führen würden, zur Ausführung eingeschleusten Codes ausgenutzt werden. Das klingt auf dem ersten Blick merkwürdig, da eine Shell ja generell zur Ausführung von Code gedacht ist, aber es mag Fälle geben, in denen ein Angreifer zwar Parameter für die Bash manipulieren, aber nicht direkt Befehle ausführen kann. Und der könnte dann die Schwachstellen unter Umständen auszunutzen, um zum Beispiel nach dem ausgelösten Pufferüberlauf eingeschleusten Code auszuführen.

CVE-2014-6277 / CVE-2014-6278

Am 27. September wurden zwei neue Schwachstellen bekannt, für die es bereits einen überarbeiteten Patch gibt.

CVE-2014-6277 ist eine aus der Ferne ausnutzbare Parsing-Schwachstelle, bei der es zum Zugriff auf nicht initialisierten Speicher kommen kann. Dadurch wird erst aus einem Pointer, der vollständig unter der Kontrolle des Angreifers steht, gelesen und danach in ihn hinein geschrieben.

CVE-2014-6278 ist eine kritische, leicht ausnutzbare Möglichkeit zum Ausführen beliebigen Codes aus der Ferne, die ihr Entdecker Michal Zalewski für äquivalent zur ursprünglichen ShellShock-Schwachstelle hält.

Nachtrag 2.10.2014:
Michal Zalewski hat weitere Details zu den von ihm entdeckten Schwachstellen CVE-2014-6277 und CVE-2014-6278 veröffentlicht.
Die Schwachstelle CVE-2014-6277 besteht in der Verwendung von nicht initialisierten Speicher und ist nur unter bestimmten Umständen ausnutzbar. Sie erlaubt zwar die Ausführung beliebigen Codes aus der Ferne und gilt damit als kritisch, deutlich gefährlicher ist aber die Schwachstelle CVE-2014-6278: Eine Folge verschachtelter $...-Statements innerhalb eines Redirects bringt den Parser aus den Tritt, der daraufhin alles was danach kommt ausführt. Der Testcode für die Schwachstelle ist

() { _; } >_[$($())] { echo hi mom; id; }' bash -c :

und funktioniert mit Bash 4.2 und 4.3, aber nicht mit älteren Versionen. Was aber nur interessant ist, wenn man wissen möchte, wann die Schwachstelle implementiert wurde. Wichtiger ist aber, dass sie behoben wird, und die Patches dafür stehen seit einigen Tagen bereit. Wer sie noch nicht installiert hat, sollte das schnellstens tun. Denn Michal Zalewski schreibt zu dieser Schwachstelle "The CVE-2014-6278 payload allows straightforward "put-your-commands-here" remote code execution on systems that are protected only with the original patch..."
Ende des Nachtrags vom 2.10.2014

Die Angriffsvektoren

Die große Gefahr der Schwachstelle besteht darin, dass eine Environment-Variable mit beliebigen Namen als "Träger" einer bösartigen Funktionsdefinition mit angehängten Befehlen dienen kann. Als erster Haupt-Angriffsvektor wurden HTTP-Requests an CGI-Skripte identifiziert.

Ein HTTP-Request sieht typischerweise so aus:

GET /path?query-parameter-name=query-parameter-wert HTTP/1.1
Host: www.demo.example
Custom: custom-header-wert
Die CGI-Spezifikation speichert alle Teile der Anfrage in Environment-Variablen. Im Fall des Apache httpd kann der "Magic String" "() {" in folgenden Feldern auftreten:

  • Host ("www.demo.example", als Environment-Variable REMOTE_HOST)
  • Header-Werten ("custom-header-wert", im Beispiel als HTTP_CUSTOM)
  • Server-Protokoll ("HTTP/1.1", als SERVER_PROTOCOL)

Beim Verarbeiten des CGI-Skripts durch die Bash wird das Environment ausgewertet, dabei werden beim Parsen der Funktionsdefinitionen die angehängten Befehle ausgeführt.

Außerdem gibt es noch eine ganze Reihe weiterer möglicher Angriffspunkte, da viele weitere vom Benutzer manipulierbare Parameter ebenfalls in Environment-Variablen gespeichert werden.

Weitere mögliche Angriffsvektoren sind

  • OpenSSH (durch die AcceptEnv Variablen, TERM oder SSH_ORIGINAL_COMMAND),
  • Git- und Subversion-Installationen, die den sshd mit ForceCommand verwenden
  • Apache-Server mit mod_cgi oder mod_cgid, die für die Bash geschriebenen CGI-Skripte verwenden oder Subshells erzeugen. Subshells werden implizit von system/popen in C, os.system/os.popen in Python, system/exec in PHP (im CGI-Modus) und bei Verwendung einer Shell von open/system in Perl verwendet.
    Mit mod_php ausgeführte PHP-Skripte sind dagegen nicht betroffen.
  • DHCP-Clients, die Shellskripte zur Konfiguration verwenden und dabei Parameter von einem möglicherweise bösartigen Server übernehmen.
    Nachtrag 9.10.:
    Trend Micro hat diesen Angriffsvektor genauer analysiert und verschiedene Möglichkeiten zum Einschleusen des ShellShock-Exploits entdeckt. Tatsächliche Angriffe über DHCP wurden bisher aber nicht entdeckt.
    Ende des Nachtrags von 9.10.
  • Verschiedene Daemons und SUID/privilegierte Programme, die Shell-Skripte mit von einem Angreifer manipulierbaren Environment-Variablen ausführen.
  • Jedes Programm, dass unter einer Shell läuft oder Shell-Skripte mit der Bash als Interpreter ausführt.
    Nicht betroffen sind Shell-Skripte, die keine Variablen exportieren.
  • Unter Linux-Systemen, in denen /bin/sh ein symbolischer Link zu /bin/bash ist, kann jeder Aufruf von popen()/system() innerhalb einer Webanwendung gefährlich sein, da über die HTTP-Header die HTTP_*-Variablen des Environments gesetzt werden.

Unter Mac OS X erlaubt die Schwachstelle das Erlangen von root-Rechten (Privilegieneskalation).

Am 25. September wurden weitere betroffene Systeme und Software gemeldet:

  • Die Weboberfläche der F5 BIG-IP Loadbalancer ist betroffen, der Angriff erfolgt über den HTTP-Header User-Agent.
  • Daniel Cid von Sucuri hat festgestellt, dass die beiden Skripte
    /cgi-sys/entropysearch.cgi
    /cgi-sys/FormMail-clone.cgi
    von CPanel betroffen sind. CPanel wird auf ca. 2,9% aller Websites eingesetzt, was nach wenig klingt, angesichts der Vielzahl von Websites weltweit aber doch noch sehr viele potentielle Opfer ergibt.
  • Außerdem sind unter Umständen viele SCADA-Systeme/Industriesteuerungen betroffen, da dort die Bash vorhanden und zum Beispiel über eine Weboberfläche erreichbar ist.

Und so ging es am 26. September weiter:

Auch auf Unix/Linux basierende NAS-Systeme sind betroffen. Synology hat ein Advisory veröffentlicht, die Bash ist zwar im Synology NAS-Betriebssystem DiskStation Manager (DSM) enthalten, aber nur für die Verwendung durch den High Availability Manager (HA Manager) vorgesehen und nicht vom Benutzer erreichbar. Updates sind trotzdem in Vorbereitung.

Oracle hat einen Security Alert zur ursprünglichen ShellShock-Schwachstelle CVE-2014-7169 veröffentlicht, der gleichzeitig die weiteren Schwachstellen abdeckt. Zusätzlich gibt es eine Liste der betroffenen Produkte und ihres Patch-Status. Die Liste der Produkte ohne Patch ist erschreckend lang.

Fortinet hat untersucht, ob iOS und Android von der Schwachstelle betroffen sind und konnte teilweise Entwarnung geben: Die Bash ist nur auf Systemen vorhanden, die erstens jailbroken/rooted sind und auf denen zweitens die Bash direkt von Benutzer oder von einem Programm installiert wurde. Das reicht aber für einen Angriff noch nicht aus, zusätzlich muss ein Angreifer noch in der Lage sein, auf dem Gerät eine Environment-Variable zu manipulieren. Was relativ unwahrscheinlich ist, da es sich ja um Smartphones, Tablets und ähnliches handelt und nicht um aus dem Internet erreichbare Server mit öffentlich zugänglichen Diensten etc..

Aber damit waren noch lange nicht alle betroffenen Systeme und Programme bekannt. Am 27. September wurden weitere veröffentlicht:

Auch der Mailserver qmail ist von der ShellShock-Schwachstelle betroffen, sofern /bin/sh ein symbolischer Link zur Bash ist und über qmail eine Mail an einen Benutzer ausgeliefert wird, in dessen .qmail-File ein Programm als Empfänger konfiguriert ist. Der Angriff erfolgt dann über präparierte E-Mail-Header.

Daniel Fox Franke hat die verschiedenen Angriffsvektoren zum Ausnutzen der Schwachstelle zusammen gestellt und dabei ebenfalls hier bisher nicht aufgeführte Möglichkeiten genannt:

Auf GitHub gibt es eine Sammlung mit Links zu Proof-of-Concepts für etliche Programme, Dienste etc..

Am 29. September gab es erst mal die Ankündigung von Updates für NAS-Systeme von QNAP. Und im InfoSec Handlers Diary Blog des Internet Storm Center wurde eine Übersicht mit angreifbaren Systemen, die leicht übersehen werden, veröffentlicht:

  • Apache - ExecCGI kann außer in der httpd.conf auch in darin eingefügten Konfigurationsdateien wie denen von virtuellen Hosts konfiguriert werden.
  • Android - Die Bash ist zwar per Default nicht enthalten, kann aber nachinstalliert werden.
  • Windows - Windows selbst ist zwar nicht betroffen, durch die Installation von zum Beispiel cygwin kann es aber angreifbar sein, wenn cygwin durch einen Webserver erreichbar ist.
  • Embedded Devices - "Kleine" Geräte basieren oft auf busybox und sind nicht betroffen, auf "großen" kann aber die Bash vorhanden und zum Beispiel über die Weboberfläche angreifbar sein.
  • CGI-Webanwendungen - Auch wenn sie nicht für die Bash geschrieben sind können sie die Bash zum Beispiel über exec() oder popen() aufrufen und dadurch angreifbar sein.
  • Außerdem sind noch die folgenden Systeme/Geräte potentiell gefährdet und sollten überprüft werden:
    • Web Content Control Server
    • E-Mail Gateways
    • Proxy Server
    • Web Application Firewalls (WAFs)
    • IPS Sensoren und Server
    • Wireless Controller
    • VoIP Server
    • Firewalls
    • Router und Switches ("Enterprise class", also "große" Geräte)
    • Jede Virtuelle Maschine, die als Open Virtualization Archive (OVA) oder Open Virtualization Format (OVF) geliefert wurde.

Nachtrag 2.10.2014:
Es gibt einige neue bzw. aktualisierte Module für das Exploit-Framework Metasploit:

VMware hat ein Security Advisory und erste Patches veröffentlicht: Betroffen sind alle als (Virtual) Appliance ausgelieferten Produkte sowie der ESX Hypervisor.
Ende des Nachtrags vom 2.10.2014:

Carsten Eilers


Übersicht über alle Artikel zum Thema

Alles, was Sie über ShellShock wissen müssen
ShellShock - Die Schwachstellen und Angriffsvektoren
ShellShock - Die Angriffe
ShellShock - Chronologie und Details: Tag 1 - Der 24. September 2014
ShellShock - Chronologie und Details: Tag 2 - Der 25. September 2014
ShellShock - Chronologie und Details: Tag 3 - Der 26. September 2014
ShellShock - Chronologie und Details: Tag 4 - Der 27. September 2014
ShellShock - Chronologie und Details: Tag 6 - Der 29. September 2014
ShellShock - Chronologie und Details: Tag 8 - Der 1. Oktober 2014

Trackbacks

Dipl.-Inform. Carsten Eilers am : Links, jede Menge Links. Und ganz wenig Kommentare.

Vorschau anzeigen
Da mir die Zeit heute etwas knapp geworden ist gibt es mal wieder nur jede Menge Links und ganz wenige Kommentare. Neues zu den aktuelle 0-Day-Exploits Los geht es mit den aktuellen 0-Day-Exploits für die OLE- Schwachstellen: F-Secure

Dipl.-Inform. Carsten Eilers am : 2014 - Das Jahr, in dem die Schwachstellen Namen bekamen

Vorschau anzeigen
2014 wird als das Jahr in die Geschichte eingehen, in dem die Schwachstellen Namen bekamen. Vorher gab es bereits Namen für Schadsoftware, aber für Schwachstellen haben die sich erst dieses Jahr wirklich durchgesetzt. Die Schwachstelle von

Dipl.-Inform. Carsten Eilers am : Drucksache: Entwickler Magazin 2.2015 - Stand das Internet 2014 in Flammen?

Vorschau anzeigen
Im Entwickler Magazin 2.15 ist ein Artikel über die "prominenten" Schwachstellen und Angriffe des Jahres 2014 erschienen. Also die, die mit Namen versehen wurden, was ja zuvor ziemlich selten passierte, 2014 aber fast üblich wurde. Au&

Dipl.-Inform. Carsten Eilers am : Neues eBook: "Websecurity - Jahresrückblick 2014"

Vorschau anzeigen
"Websecurity - Jahresrückblick 2014" ist als eBook bei entwickler.press erschienen. Im ersten Kapitel dreht sich alles um die Angriffe auf und Schwachstellne in SSL und TLS, im zweiten Kapitel geht es um die weiteren prominenten Angri

Dipl.-Inform. Carsten Eilers am : Drucksache: Windows Developer 8.15 - Einstieg in die Welt der Exploits

Vorschau anzeigen
Im windows.developer 8.15 ist ein Artikel über das Testen von Schwachstellen, Workarounds und Patches mit Hilfe von Exploits erschienen. Als "Exploit" wird Code bezeichnet, mit dem eine Schwachstelle ausgenutzt wird. Die Cyberkriminellen

entwickler.de am : PingBack

Die Anzeige des Inhaltes dieses Trackbacks ist leider nicht möglich.