Skip to main content

Server Side Template Injection (SSTI) | Solyd One

  • Server Side Template Injection (SSTI) | Solyd One
info

Precisar identificar qual engine o site está usando. Ex: Pugjs, Angular, React, etc

alt text

O que é SSTI (Server-Side Template Injection)

Injeção de Template do Lado do Servidor (SSTI) é uma vulnerabilidade de segurança em aplicações web que usam motores de template (como Jinja2 no Python, Twig no PHP, Freemarker no Java, Velocity, etc.) para gerar páginas dinâmicas.

Ela acontece quando a aplicação insere entrada do usuário dentro do template sem validação ou escape adequado. Isso permite que um invasor injete expressões maliciosas que serão processadas pelo motor de template no servidor.


Como Funciona

Imagine um sistema que recebe um nome e o renderiza no template:

# Exemplo vulnerável em Flask (Python + Jinja2)
from flask import Flask, request, render_template_string

app = Flask(__name__)

@app.route("/ola")
def ola():
nome = request.args.get("nome", "Mundo")
template = f"Olá {nome}!"
return render_template_string(template)

Se o usuário acessar:

/ola?nome=João

A saída será:

Olá João!

👉 Mas se o invasor colocar:

/ola?nome={{7*7}}

O template engine vai avaliar a expressão:

Olá 49!

Isso já mostra a falha de SSTI. Em casos mais graves, o atacante pode acessar variáveis internas, ler arquivos do sistema, ou até executar código no servidor.


Impactos Possíveis

  • Exfiltração de dados sensíveis (senhas, chaves API, configs).
  • Execução remota de código (RCE).
  • Acesso ao sistema operacional (comandos shell).
  • Escalada de privilégios.

Como Prevenir

  1. Nunca concatenar diretamente dados do usuário em templates.

  2. Usar funções seguras de renderização que isolam variáveis.

    • Exemplo em Flask:

      return render_template("index.html", nome=nome)
  3. Validar e sanitizar entradas do usuário.

  4. Se possível, desabilitar funcionalidades perigosas no template engine.

  5. Utilizar WAF (Web Application Firewall) como camada extra de defesa.


⚠️ Resumo: SSTI acontece quando a aplicação trata entradas do usuário como parte do código de template. É perigoso porque pode levar a execução de código no servidor.