Inyección de plantilla del lado del servidor - Vulnerabilidad de Ssti - Cargas útiles de Ssti

Inyección de plantillas del lado del servidor explicada con ejemplos de código real

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

from flask import request, render_template_string
@app.route("/hello")
def hello():
    name = request.args.get("name", "world")
    # ❌ Vulnerable: directly rendering user input
    return render_template_string("Hello " + name)

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

// ❌ Vulnerable Twig usage
$template = $twig->createTemplate("Welcome " . $_GET['user']);
echo $template->render([]);

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:

# ❌ Insecure Helm values with user input
configMap:
  appMessage: "{{ .Values.message }}"

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
# ❌ Insecure: session cookie without flags
response.set_cookie("session", token)
# ✅ Secure: session cookie hardened
response.set_cookie("session", token, httponly=True, secure=True, samesite="Strict")

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

Herramientas como xygeni Ayudar a los equipos a detectar el uso inseguro de plantillas, bloquear vulnerabilidades de SSI y aplicar prácticas seguras en todos los entornos. pipelines y dependencias. En DevSecOps, tratar las cargas útiles de SSTI como un riesgo de primer nivel es esencial porque una sola inyección en su pipeline o la aplicación puede comprometer todo su entorno.

sca-tools-software-herramientas-de-analisis-de-composicion
Priorice, solucione y proteja sus riesgos de software
Además, te ofrecemos una prueba gratuita de 7 días de nuestra Business Edition para que puedas explorar las funciones avanzadas de la plataforma SecurityScorecard.
No se requiere tarjeta de crédito

Asegure el desarrollo y entrega de software

con la suite de productos Xygeni