¿Server-side template injection?

¿Qué es la Inyección de Plantillas del Lado del Servidor (SSTI)?

La inyección de plantillas del lado del servidor (Server-Side Template Injection, SSTI) es una vulnerabilidad que permite a un atacante inyectar código malicioso en una plantilla del servidor que luego es interpretada y ejecutada por el motor de plantillas del servidor. Esto puede llevar a la ejecución remota de código, robo de datos, y compromisos del sistema. SSTI es particularmente peligrosa debido a su potencial para convertir una simple vulnerabilidad de inyección en una completa toma de control del servidor.

¿Cómo Funciona la SSTI?

La SSTI ocurre cuando una aplicación web incorpora entradas del usuario sin la debida validación y sanitización en una plantilla del lado del servidor. Los motores de plantillas permiten la inserción dinámica de contenido en las páginas web, y cuando estos motores no manejan adecuadamente las entradas del usuario, se pueden introducir inyecciones maliciosas.

Ejemplo de Código Vulnerable

Consideremos un ejemplo en Python utilizando el motor de plantillas Jinja2:

from flask import Flask, request, render_template_string

app = Flask(__name__)

@app.route('/hello')
def hello():
    name = request.args.get('name', 'World')
    template = '<h1>Hello %s!</h1>' % name
    return render_template_string(template)

En este ejemplo, la entrada del usuario (name) se inserta directamente en la plantilla HTML sin ninguna validación, lo que puede permitir a un atacante inyectar código malicioso.

Ejemplo de Explotación de SSTI

Si un atacante proporciona la siguiente entrada:

{{ 7*7 }}

La plantilla renderizada será:

<h1>Hello 49!</h1>

Esto demuestra que el código proporcionado por el usuario es evaluado por el motor de plantillas Jinja2.

Una explotación más avanzada podría incluir:

{{ config.items() }}

Lo que permitiría al atacante acceder a la configuración de la aplicación.

Impacto de la SSTI

El impacto de la explotación de SSTI puede ser severo, incluyendo:

  1. Ejecución Remota de Código (RCE): Un atacante puede ejecutar comandos arbitrarios en el servidor.

  2. Robo de Datos Sensibles: Acceso a variables de entorno, configuraciones, y datos confidenciales.

  3. Compromiso del Sistema: Escalar privilegios y comprometer el servidor.

  4. Destrucción de Datos: Modificar o eliminar datos en el servidor.

Última actualización