¿Qué es la inyección de plantillas del lado del servidor?

Las SST (plantillas del lado del servidor) ofrecen una técnica fácil de manejar la generación dinámica de código HTML. Aunque también pueden convertirse en un objetivo para SSTI (inyección de plantilla del lado del servidor).  

Los SST permiten a los desarrolladores rellenar previamente una página web con información de usuario personalizada directamente en el servidor. Por lo tanto, generalmente es más rápido realizar todas las requests dentro de un servidor en lugar de realizar viajes de ida y vuelta adicionales del navegador al servidor. Es diferente de las plantillas del lado del cliente, en las que los navegadores generalmente cargan una plantilla que afecta la experiencia total del usuario final.

Las aplicaciones web ricas en funciones generalmente incorporan las entradas del usuario en plantillas web para proporcionar accesos directos y funcionalidades flexibles. Esto hace que una vulnerabilidad se confunda fácilmente con secuencias de comandos entre sitios.

Funcionamiento de SST:
el método más común para que los marcos web creen HTML dinámicamente es mediante el uso de plantillas. Comprende tanto las partes estáticas de la salida HTML como la sintaxis que describe cómo colocará el contenido dinámico.

Estos sistemas de plantillas no están a salvo de autores de plantillas sospechosos. Por ejemplo, un sitio web no debe permitir que sus usuarios proporcionen sus propias plantillas, ya que el autor de una plantilla puede ejecutar ataques de secuencias de comandos entre sitios y también puede obtener propiedades de estas variables de plantilla que pueden contener datos confidenciales.

Luego, estos motores de plantillas procesan los archivos de plantilla, lo que ayuda a completar la información dinámica en las páginas web. El motor de plantillas genera la respuesta de salida HTML cuando llega una solicitud HTTP .

Algunos de los motores de plantillas del lado del servidor más utilizados son Jinja2 o Jinja, Freemaker, Mako, Velocity, Smarty, Tornado, Genshi, Twig, Moustache, etc.

Funcionamiento de SSTI:
se produce una SSTI cuando a un usuario malintencionado se le permite usar la sintaxis de plantilla nativa para inyectar una carga útil malévola en una plantilla, que luego se ejecuta en el lado del servidor.

Los motores de plantillas están diseñados para crear páginas web fusionando plantillas fijas con datos dinámicos. Los ataques SSTI pueden ocurrir cuando un usuario ingresa información y se concatena directamente en la plantilla, en lugar de pasarla en los datos del formulario. Permite a los usuarios maliciosos inyectar comandos de plantilla aleatorios que pueden distorsionar el motor de plantillas, por lo general, les permite tomar el control total del servidor.

Por ejemplo,

Template = “UserName:” + Input
render(template)
  • En el ejemplo anterior, la «Entrada» es una parte de la plantilla. Por lo tanto, un usuario puede ingresar el nombre de usuario o algún otro parámetro de una aplicación web, como algunos códigos arbitrarios. Por lo tanto, un usuario puede ingresar algo como.
Username: {{9*9}}  
Username 81
  • Como se puede ver arriba, el motor SST procesa la entrada {{9*9}} y da 81 como salida. Esto demuestra que la aplicación web es vulnerable.
  • Y si se descubre que la aplicación web es vulnerable, un atacante puede incluso ingresar algún código malicioso para obtener acceso remoto completo. Por ejemplo,
About:{{Malicious Code()}}

Detección de IPTB:

Los SSTI se pueden detectar mediante el método de detección de texto sin formato o mediante el método de detección de contexto de código.

  • Método de detección de texto
    sin formato: la detección de texto sin formato se puede utilizar para detectar SSTI, en este caso, el probador puede utilizar algunas de las expresiones de plantilla comúnmente utilizadas.
For example: {{8*5}}, ${2*7}, {{8/0}}, <%= 5/0 %>, ${foobar}, {{9*9}}, etc.  
For example: Greet_user = username
Hello user_x
  • Si el servidor de carga útil responde con un «Hola» en blanco. Luego, el probador puede salirse de la declaración de la plantilla e inyectar una etiqueta HTML. Por ejemplo,
Greet_user = username
Hello
  • Ahora, inyectando la etiqueta HTML.
Greet_user = username}}<tag>
Hello user_x <tag>

Prevenciones:
las prevenciones para la inyección de plantillas del lado del servidor pueden variar según el motor de plantillas utilizado. Aunque el sandboxing y la desinfección se pueden usar para prevenir esta vulnerabilidad.  

  • Sandboxing:
    se utiliza para crear un entorno de prueba aislado en una red que imita los entornos operativos del usuario final, en el que un usuario puede ejecutar, analizar u observar el código. Evita que las amenazas ingresen a la red y también ayuda a inspeccionar código no confiable o no probado.
  • Desinfección:
    las plantillas no deben generarse a partir de la entrada controlada por el usuario. El usuario debe pasar la entrada a la plantilla solo mediante el uso de parámetros de plantilla. Desinfecte la entrada antes de pasarla a las plantillas eliminando los caracteres indeseables e inseguros antes de analizar la información. Esto reduce las vulnerabilidades de cualquier investigación maliciosa de sus plantillas.

Publicación traducida automáticamente

Artículo escrito por kmbh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *