La inyección de plantillas del lado del servidor (SSTI, por sus siglas en inglés) es una vulnerabilidad en la que la entrada del usuario es evaluada por un motor de plantillas en lugar de ser renderizada como texto plano, lo que permite a un atacante ejecutar código arbitrario en el servidor.
Cómo funciona la inyección de plantillas del lado del servidor en segundo plano
Una inyección de plantilla del lado del servidor ocurre cuando la entrada del usuario se integra directamente en un motor de plantillas y se evalúa sin la debida limpieza o aislamiento. Esto crea una vulnerabilidad SSTI que permite a un atacante inyectar cargas útiles SSTI especialmente diseñadas (por ejemplo, {{7*7}} en Jinja2), que el motor evaluará, lo que permite desde la divulgación de datos hasta la ejecución de código arbitrario en el contexto del servidor. Dado que los distintos motores de plantillas exponen distintos objetos y API, las cargas útiles de SSTI varían según la plataforma, pero comparten el mismo peligro: permiten que entradas no confiables escapen del flujo de renderizado esperado y se ejecuten en tiempo de ejecución de la aplicación, lo que a menudo provoca la ejecución remota completa de código o el movimiento lateral si no se controlan.
Ejemplo de vulnerabilidad mínima en Jinja2
Si un usuario envía ?nombre={{7*7}}, la aplicación lo evaluará y devolverá Hola 49Esa es una vulnerabilidad SSTI típica de los libros de texto.
Ejemplo de vulnerabilidad mínima en Twig
Un atacante puede inyectar cargas útiles SSTI como {{7*7}} para probar la ejecución del código. El peligro: una simple inyección puede escalar hasta la lectura de archivos, la ejecución de comandos del sistema operativo o un ataque más profundo a la infraestructura.
Exploits del mundo real: Cargas útiles SSTI que activan la ejecución remota de código
Una vez que existe una vulnerabilidad SSTI, los atacantes intentan pasar de las matemáticas de prueba de concepto a la prueba completa. ICELos distintos motores de plantillas manejan las cargas útiles de manera diferente.
Cargas útiles de Jinja2
- {{7*7}} → ejecución aritmética
- {{config.items()}} → filtraciones de configuraciones del servidor.
- {{ “”.__class__.__mro__[2].__subclasses__() }} → camino hacia RCE
Cargas útiles de velocidad
- #conjunto($x=”7″)${x} → derivación de inyección
- #set($a=$class.inspect(“java.lang.Runtime”)) → acceso directo en tiempo de ejecución
Cargas útiles de ramitas
- {{7*7}} → aritmética
- {{app.request.server.all}} → variables de entorno
- {{_self.env.registerUndefinedFilterCallback(‘system’)}} → ejecución de código
Estas cargas útiles SSTI demuestran cómo la misma vulnerabilidad en diferentes motores conduce a diferentes rutas de explotación, pero siempre son peligrosos.
Dónde se esconde la inyección de plantillas del lado del servidor CI/CDAplicaciones impulsadas por
La inyección de plantillas del lado del servidor no es solo un riesgo de las aplicaciones web; aparece en tapas españolas CI/CD pipelines Los escondites típicos incluyen:
- Gráficos de timón En Kubernetes, donde los valores de plantilla se representan dinámicamente
- Plantillas de correo electrónico que concatenan entradas controladas por el usuario
- Cuadros de mando donde las cadenas de consulta o los datos de configuración se inyectan en las plantillas
- Scripts de DevOps que generan HTML/Markdown utilizando motores de plantillas.
Ejemplo:
If.Valores.mensaje proviene de una entrada no confiable, introduce una inyección de plantilla del lado del servidor en su implementación pipeline misma.
Prevención de SSTI con patrones de plantilla más seguros y análisis estático
Para mitigar las vulnerabilidades de SSTI se requieren mejores patrones de codificación y detección temprana.
Patrones seguros
- ❌ No utilizar cadena de plantilla de renderizado o equivalente
- ✅ Utilice archivos de plantilla predefinidos y pase variables saneadas
- ✅ Motores de plantillas Sandbox cuando estén disponibles
- ✅ Validar y escapar la entrada del usuario antes de renderizar
Mini lista de verificación para desarrolladores
- Nunca procese directamente la entrada del usuario sin procesar
- Utilice plantillas de espacio aislado cuando sea compatible
- Desinfecte y valide todas las variables de la plantilla
- Evite los evaluadores de plantillas personalizados
- Escanear código para cadena de plantilla de renderizado o patrones de concatenación de cadenas
Análisis estático Además, los linters pueden marcar construcciones riesgosas antes de que lleguen a producción.
Integración de comprobaciones SSTI en DevSecOps Pipelines
Detectar la inyección de plantillas del lado del servidor de forma temprana es más económico y seguro que corregirla más tarde. Los equipos de DevSecOps deberían integrar comprobaciones en pipelines:
- Commit hooks: rechazar commits con funciones peligrosas (cadena de plantilla de renderizado)
- Analizadores estáticos: Analizar el riesgo de inyección de plantillas del lado del servidor en el código de plantillas.
- Validación de dependencia: marcar motores de plantillas obsoletos con vulnerabilidades SSTI conocidas
- Pipeline puertas: el bloque se fusiona hasta que se aprueben las comprobaciones SSTI
Al hacer que la detección de carga útil SSTI sea parte de CI/CD, evita que se envíe código explotable.
No permita que la inyección de plantillas del lado del servidor se filtre en su pila
Una sola inyección de plantilla del lado del servidor puede escalar a partir de trucos matemáticos ({{7*7}}) a la ejecución completa de código remoto. Las vulnerabilidades SSTI aparecen no solo en aplicaciones web, sino también en CI/CD pipelines, gráficos de Helm y plantillas de correo electrónico.
Puntos clave
- Nunca procese la entrada sin procesar del usuario en las plantillas
- Validar y desinfectar todas las variables dinámicas
- Diferentes motores (Jinja2, Velocity, Twig) tienen diferentes cargas útiles SSTI, pero todos pueden ser utilizados como armas.
- Utilice análisis estático y puertas de fallo rápido en pipelines
- Audite las plantillas en su pila periódicamente
xygeni Analiza tu código fuente en busca de vulnerabilidades de inyección y otros patrones de codificación inseguros a medida que aparecen, detectando construcciones riesgosas como la representación de plantillas no sanitizadas antes de que lleguen a producción, con la tasa de falsos positivos más baja en el OWASP Benchmark. Xygeni CI/CD y IaC security El escaneo extiende esa misma cobertura a pipeline configuraciones, gráficos de Helm y scripts de compilación, señalando configuraciones incorrectas y comandos maliciosos antes de su envío. Cuando Xygeni encuentra una vulnerabilidad, AI AutoFix genera una solución contextual y lista para desarrolladores directamente en el pull request, por lo que la remediación no espera al próximo sprint.
En DevSecOps, detectar la inyección de plantillas en el pipeline Es la fase de desarrollo, y no la posterior al despliegue, la que impide que una sola carga útil se convierta en una vulnerabilidad total.
Empieza gratis. No necesitas tarjeta de crédito, escanea tu primer repositorio en minutos.
Preguntas Frecuentes
¿Qué es la inyección de plantillas del lado del servidor?
La vulnerabilidad SSTI se produce cuando la entrada del usuario se pasa a un motor de plantillas y se evalúa como código en lugar de mostrarse como texto, lo que permite a un atacante ejecutar comandos en el contexto del servidor.
¿SSTI es lo mismo que XSS?
No. XSS inyecta código que se ejecuta en el navegador de la víctima; SSTI inyecta código que el motor de plantillas evalúa en el propio servidor, razón por la cual SSTI puede conducir directamente a la ejecución remota de código.
¿Qué motores de plantillas son vulnerables a SSTI?
Cualquier motor que evalúe expresiones puede ser vulnerable si la entrada del usuario le llega sin haber sido sanitizada, incluidos Jinja2, Twig y Velocity, aunque cada uno expone objetos diferentes y, por lo tanto, diferentes vías de explotación.
¿Cómo se previene la SSTI en CI/CD pipelines?
Escanee en busca de patrones peligrosos como render_template_string at commit Tiempo, motores de plantillas de entorno aislado (cuando sean compatibles) y fusiones de control basadas en los resultados del análisis estático antes de que el código llegue a producción.





