building-circle-arrow-rightEncadenamiento de vulnerabilidades SSRF + SSTI para obtener RCE

------------------------------------------------------------------------------------------------

Una vez accedemos al panel de administración se observa que el panel tiene una URL localhost apuntando al puerto 1337. Al parecer existe un aplicativo no accesible al publico. Usando el SSRF que encontramos anteriormente podríamos intentar visualizar la aplicación y tratar de encontrar vulnerabilidades.

Luego de identificar la informacion previa, se procede a visualizar el contenido del puerto 1337 usando el SSRF:

Para validar el servicio podemos usar el siguiente enlace:

http://44.199.19.36:4000/links/open?url=http://localhost:1337/?name=gerharrow-up-right

Al analizar algunas de las peticiones, se ve claramente que el aplicativo esta reflejando el contenido que pongamos en la variable name.

Por lo anterior, es necesario probar si además es vulnerable a ataques de inyección de template o SSTI (Server Side Template Injection).

La SSTI (Server-Side Template Injection) es una vulnerabilidad que ocurre cuando un atacante puede inyectar código malicioso en las plantillas del lado del servidor que genera el contenido HTML. Las plantillas del lado del servidor son utilizadas en muchos frameworks web para generar dinámicamente páginas web a partir de datos proporcionados por el usuario o por la aplicación. Si las plantillas no están correctamente validadas o sanitizadas, un atacante puede inyectar código en las mismas, lo que permitirá la ejecución de comandos en el servidor.

Los motores de plantillas como Jinja2 (Python), Twig (PHP), Freemarker (Java) y otros, permiten la incorporación de lógica y código en las plantillas. En lugar de simplemente renderizar datos, estos motores pueden ejecutar expresiones y funciones, lo que genera una amplia superficie de ataque si no se validan correctamente los datos que llegan al motor de plantillas.

¿Cómo ocurre un ataque SSTI?

Un ataque SSTI ocurre cuando una aplicación web permite a un usuario enviar datos que luego son procesados por el motor de plantillas en el servidor. Si el motor de plantillas evalúa directamente las entradas proporcionadas por el usuario, el atacante puede aprovecharlo para ejecutar código arbitrario en el servidor.

Por ejemplo, si una aplicación web permite que los usuarios pasen un valor a través de una URL y este valor se inserta en una plantilla para generar una respuesta HTML, un atacante podría modificar ese valor para incluir código que el motor de plantillas ejecute.

Recomendación:

Para probar y explotar esta vulnerabilidad, puedes utilizar un conjunto de payloads conocidos que se encuentran en el repositorio PayloadsAllTheThings, específicamente en la sección de Server-Side Template Injection (SSTI). Este repositorio incluye múltiples payloads diseñados para fuzzear motores de plantillas y determinar si una aplicación es vulnerable.

Recomiendo utilizar este recurso para identificar y explotar la SSTI en la URL proporcionada:

Repositorio PayloadsAllTheThings - SSTI Fuzz:

Este archivo contiene payloads que se pueden utilizar para inyectar diferentes tipos de código y funciones que pueden ser evaluadas en los motores de plantillas.

Last updated