Shocker
Shellshock (CVE-2014-6271) en un CGI de Apache para entrar, y escalada a root con sudo perl sin contraseña.
Shocker
| Máquina | SO | Dificultad | IP |
|---|---|---|---|
| Shocker | Linux | Easy | 10.10.10.56 |
A tener en cuenta...
Resumen
Shocker es, como su nombre canta, Shellshock: un CGI de Apache que ejecuta bash y hereda las cabeceras HTTP como variables de entorno. Con una User-Agent malintencionada ejecutamos comandos en el servidor, y la escalada es de regalo: el usuario puede lanzar perl como root sin contraseña.
Vulnerabilidad
Shellshock — CVE-2014-6271 (Crítica · 9.8)
Bash tenía un fallo al procesar variables de entorno: si una variable contenía una definición de función seguida de comandos, bash ejecutaba esos comandos al cargarla. Un CGI invocado por Apache mete las cabeceras de la petición como variables de entorno, así que mandando una cabecera como () { :;}; comando conseguimos que el comando se ejecute con los privilegios del servidor web.
sudo perl sin contraseña
El usuario web puede ejecutar /usr/bin/perl como root mediante sudo y sin pedir contraseña. Perl puede lanzar una shell, así que eso es un root directo.
Reconocimiento
Escaneo completo de puertos
| Puerto | Servicio | Versión |
| 80 | http | Apache httpd 2.4.18 |
| 2222 | ssh | OpenSSH 7.2p2 |
Un Apache en el 80 y un SSH movido al 2222. La web no tiene gran cosa a simple vista, así que toca fuzzear directorios.
Enumeración
Busco rutas típicas y, muy importante, el directorio de CGIs
Con un CGI a la vista, el objetivo es dar con el script concreto. Probando extensiones aparece /cgi-bin/user.sh
Un script en bash servido como CGI: candidato perfecto a Shellshock.
Explotación
Paso 1 — ponerme en escucha con nc en el puerto elegido.
Paso 2 — inyectar el payload. Meto el payload de Shellshock en la cabecera User-Agent para que bash ejecute una reverse shell
Paso 3 — shell. El CGI mete la User-Agent como variable de entorno, bash la evalúa y ejecuta el comando, devolviendo la shell como el usuario del servicio
(En Metasploit, el módulo equivalente es exploit/multi/http/apache_mod_cgi_bash_env_exec.)
Escalada de privilegios
Nada más entrar, el reflejo obligado: ver qué puedo ejecutar con sudo
Puedo lanzar perl como root sin contraseña. Perl ejecuta comandos del sistema de sobra, así que le pido una shell
Root. El truco se consulta igual en GTFOBins buscando 'perl'.
Flags
La de usuario, en el home de shelly
Y la de root
Cómo se arregla
- Actualizar bash: Shellshock se parcheó en 2014. Un bash al día cierra el vector por completo.
- Quitar CGIs innecesarios: si no hace falta mod_cgi, se deshabilita; cada CGI en bash es superficie de ataque.
- Afinar el sudo: dar perl (o cualquier intérprete) como root y sin contraseña es un root encubierto. Revisar /etc/sudoers siguiendo GTFOBins.
- Menor privilegio: que el servicio web corra con una cuenta mínima.
Conclusiones
Shocker une dos lecciones muy claras: un bash sin parchear expuesto por CGI permite RCE con una simple cabecera, y un sudo mal configurado convierte a cualquier usuario en root.
Dos hábitos que resuelven máquinas solos: fuzzear el /cgi-bin/ cuando hay Apache, y lanzar sudo -l en cuanto pisas el sistema. Y para la escalada, GTFOBins es tu mejor amigo.