Explotación de ShellShock y vulnerabilidades

    Un ataque Shellshock es un tipo de ataque informático que aprovecha una vulnerabilidad en el intérprete de comandos Bash en sistemas operativos basados en Unix y Linux. Esta vulnerabilidad se descubrió en el 24 de septiembre de 2014(CVE-2014-6271) y se considera uno de los ataques más grandes y generalizados en la historia de la informática.

    Esta vulnerabilidad en Bash permite a los atacantes ejecutar comandos maliciosos en el sistema afectado, lo que les permite tomar el control del sistema.

    La vulnerabilidad Shellshock se produce en el intérprete de comandos Bash, que es utilizado por muchos sistemas operativos Unix y Linux para ejecutar scripts de shell.

    El problema con esta vulnerabilidad se viene produciendo porque Bash permite declarar funciones, pero estas no se validan de forma correcta cuando se almacenan en una variable. por ejemplo:

variable='() { contenido de la función;}; '

    Y en vez de simplemente definirse, el bug que tenía Bash ocasionaba que se ejecutase el comando que hubiese después de la definición de la función.     
    
    Los atacantes pueden explotar esta vulnerabilidad a través de diferentes vectores de ataque. Uno de ellos es a través del User-Agent, que es la información que el navegador web envía al servidor web para identificar el tipo de navegador y sistema operativo que se está utilizando. Los atacantes pueden manipular el User-Agent para incluir comandos maliciosos, que el servidor web ejecutará al recibir la solicitud.

    Esta vulnerabilidad se puede explotar remotamente, por ejemplo, en un servidor web, ocasionando un Remote Command Execution (RCE). Los archivos susceptibles a un ataque Shellshock son los que comúnmente pertenezcan a alguna de las siguientes extensiones:
  
    • cgi
    • sh


Demostración


Vamos a ver como sería la explotación usando la máquina SickOs 1.1 de VulnHub.

Una vez hecho el reconocimiento mediante fuzzing y viendo que las rutas son existentes:


Lo primero de todo es identificar el archivo que puede ser vulnerable, en este caso status es tan sencillo como enviar el payload característico de shellshock a través de alguna cabecera, por ejemplo, el User-Agent:


De esta forma, acabamos de verificar que es vulnerable. Por lo que ya prácticamente tenemos RCE, si queremos confirmarlo aún más, podemos probar a mandarnos paquetes ICMP:



     • Colocamos un echo después de la declaración de la función para que el segundo comando pueda mostrar su salida en la respuesta HTTP.

También podríamos mandarnos una reverse shell y obtener acceso a la maquina:



Lo podemos automatizar con metasploit:



2 comentarios:

  1. ¡Pedazo post! Gracias por compartir tanto. 🦾 🚀

    ResponderEliminar
    Respuestas
    1. Es todo un placer, espero que te haya gustado. Gracias por apoyar mi contenido y por compartir tus videos ;)

      Eliminar