SSTI
Server-Side Template Injection: l'input dell'utente finisce nel motore di template come codice invece che come dato, spesso con esecuzione remota di codice.
Esempio classico con Jinja2: render_template_string("Hello " + name). Inviando name = {{ 7*7 }} la risposta è «Hello 49». Da lì si arriva a {{ config.__class__.__init__.__globals__['os'].popen('id').read() }}, cioè una shell. Esistono equivalenti per Twig, Freemarker, Velocity, Smarty, Handlebars ed ERB.
Difesa: separare il template (file statico) dai dati (parametri) e non rendere mai stringhe dell'utente come template. La modalità sandbox del motore aiuta, ma in passato è stata aggirata più volte. PortSwigger offre una buona serie di laboratori sull'escalation.