La Server-Side Template Injection puede ser mitigada siguiendo un conjunto de buenas prácticas e implementando medidas de seguridad en el código de la aplicación. Aquí está cómo mitigar SSTI en Smarty, Jade y Jinja2:


Jinja2

  1. Modo Snadbox: Habilita el entorno sandboxeado en Jinja2 para restringir la habilidad de la plantilla para acceder a funciones y atributos inseguros. Esto previene la ejecución arbitraria de código.
python
from jinja2 import Environment, select_autoescape, sandbox

env = Environment(
    autoescape=select_autoescape(['html', 'xml']),
    extensions=[sandbox.SandboxedEnvironment]
)
  1. Sanitización de Input: Sanitiza siempre el input para escapar o eliminar caracteres y strings potencialmente peligrosos que puedan ser interpretados como código.
  2. Auditoría de plantilla: Revisa y audita regularmente las plantilas en busca de patrones de código inseguros, como directamente incrustar el input del usuario sin sanitización.

Jade(Pug)

  1. Evita Evaluación Directa de JavaScript: Restringe o evita uar la habilidad de Pug para evaluar código JavaScript en las plantillas. Usa métodos alternativos para manejar contenido dinámico que no involucre ejecución directa de código:
pug
var user = !{JSON.stringify(user)}
h1= user.name

Usa !{} con cuidado ya que permite putput no escapado, lo que puede ser peligroso. Mejor usa #{} que si espaca HTML por defecto.

  1. Valida y sanitiza los Inputs: Asegúrate de que todos los inputs del usuario sean validados contra el esquema estricto y sanitizados antes de que sean renderizados por el motor. Esto reduce el riesgo de ejecución de código arbitraria.
  2. Ajusta la Configuración para que sea Segura: Usa configuraciones de entorno que minimicen riesgos, como deshabilitar funcionalidades que permitan la ejecución del script.

Smarty

  1. Deshabilita las Etiquetas {php}: Asegúrate de que las etiquetas {php} estén deshabilitadas en la configuración de Smarty para prevenir la ejecución de PHP en las plantillas.
php
$smarty->security_policy->php_handling = Smarty::PHP_REMOVE;
$smarty->disable_security = false;
  1. Usa Manejadores Seguros: Si debes permitir a los usuarios personalizar las plantillas, ofrece un conjunto de etiquetas o modificadores que puedan usar, lo que no permite la ejecuiñon directa de comandos o acceso a la shell.
  2. Revisiones Regulares de Seguridad: Realiza revisiones de seguridad de los archivos de plantillas y la lógica de manejo de información para asegurar que no hay prácticas inseguras. Actualiza Smarty regularmente.

Sandboxing in Template Engines

Es una funcionalidad de seguridad que restringe la ejecución de código potencialmente malicioso en las plantillas. Limita las acciones que pueden realizar estas como operaciones con archivos o ejecución de comandos en el sistema. La debida sandboxing ayuda a prevenir problemas de seguridad.

Importancia del Sandboxing

  • Restricciones de Funciones: Limita las funciones o métodos que pueden ser llamados desde la plantilla, bloqueando operaciones potencialmente peligrosas.
  • Acceso a Variables e Información: Controla el acceso a variables globales e información sensible, asegurando que las plantillas no pueden manipular o exponer la información crítica.