SSTI
Server-Side Template Injection: пользовательский ввод попадает в шаблонизатор как код, а не как данные — нередко это сразу RCE.
Классический пример на Jinja2: render_template_string("Hello " + name). Если передать name = {{ 7*7 }}, ответ будет «Hello 49». Дальше можно дойти до {{ config.__class__.__init__.__globals__['os'].popen('id').read() }} — то есть до доступа к оболочке. Аналоги есть у Twig, Freemarker, Velocity, Smarty, Handlebars, ERB.
Защита: разделять шаблон (статический файл) и данные (параметры) и никогда не рендерить пользовательские строки как шаблоны. Песочница шаблонизатора помогает, но её неоднократно обходили. У PortSwigger есть хорошая серия лабораторных по эскалации.