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
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.
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.
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.
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
oderSSH_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:
- Inetd
- Mailserver, außer qmail werden Exim, Postfix und Procmail aufgeführt
- OpenVPN mit bestimmten Konfigurationen
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:
- Pure-FTPd External Authentication Bash Environment Variable Code Injection (Exploit für die ShellShock-Schwachstelle CVE-2014-6271), ein bisher unbekannter Angriffsvektor
- Apache mod_cgi Bash Environment Variable Code Injection (Exploit für CVE-2014-6271 und die von Michal Zaleski entdeckte Schwachstelle CVE-2014-6278 (s.u.))
- OS X VMWare Fusion Privilege Escalation via Bash Environment Code Injection (Exploit für CVE-2014-6271)
- Dhclient Bash Environment Variable Injection (Exploit für CVE-2014-6271)
- Apache mod_cgi Bash Environment Variable RCE Scanner (Exploit für CVE-2014-6271 und CVE-2014-6278)
- DHCP Client Bash Environment Variable Code Injection (Exploit für CVE-2014-6271)
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:
Ü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
Dipl.-Inform. Carsten Eilers am : 2014 - Das Jahr, in dem die Schwachstellen Namen bekamen
Vorschau anzeigen
Dipl.-Inform. Carsten Eilers am : Drucksache: Entwickler Magazin 2.2015 - Stand das Internet 2014 in Flammen?
Vorschau anzeigen
Dipl.-Inform. Carsten Eilers am : Neues eBook: "Websecurity - Jahresrückblick 2014"
Vorschau anzeigen
Dipl.-Inform. Carsten Eilers am : Drucksache: Windows Developer 8.15 - Einstieg in die Welt der Exploits
Vorschau anzeigen
entwickler.de am : PingBack
Die Anzeige des Inhaltes dieses Trackbacks ist leider nicht möglich.