flawopen.com/SSTI/Explications
Qu’est-ce que l’injection de template côté serveur ?
Une injection de template côté serveur se produit lorsqu’une entrée non fiable est interprétée comme le code source du template au lieu d’être transmise comme donnée. L’impact dépend du moteur, de sa configuration et des capacités exposées : de l’évaluation d’expressions à l’exécution de code côté serveur. Toute SSTI ne permet pas automatiquement l’exécution de code.
# Python / Jinja2 template = f"Hello {name}!" return render_template_string(template) # Input: {{ 7*7 }} renders as "49" # This confirms expression evaluation; # impact still depends on engine access. // Java / Freemarker String tpl = "Welcome " + userName; new Template("t", tpl, cfg) .process(model, out);
# The template is a fixed string the # developer wrote. The user value is # passed in as a variable. return render_template( "greeting.html", name=name ) # Or with a literal template string: return render_template_string( "Hello {{ name }}!", name=name ) // Java equivalent: template from file, // user value in the model map.
La distinction essentielle
Un moteur de template reçoit deux entrées : le template et les données de contexte. Le template est un programme ; les données sont les valeurs qu’il lit. Une SSTI consiste à laisser une entrée utilisateur passer de la catégorie des données à celle du code source du template.
C’est la même erreur structurelle que l’injection SQL, où les données sont concaténées au texte de la requête, et que Log4Shell, où des données atteignaient un évaluateur d’expressions via un message de journal. La correction suit le même principe : garder le programme fixe et transmettre les valeurs non fiables par un canal de paramètres.
Quand l’impact peut inclure une exécution de code
Lorsqu’un moteur expose des objets ou méthodes puissants au template, un attaquant peut atteindre des capacités sensibles de l’application. L’exécution de code dépend du moteur, de sa version, de sa configuration, du sandbox et des données exposées. D’autres impacts possibles sont la divulgation d’informations et l’épuisement des ressources. Traitez le code source de template contrôlé par l’utilisateur comme une logique active ; ne vous fiez pas au sandbox seul sans limiter les objets accessibles et les ressources de rendu.
Comment la détecter
{{7*7}}
${7*7}
<%= 7*7 %>
#{7*7}
Si la réponse contient 49 au lieu du texte littéral, l’entrée est évaluée comme une syntaxe de template. Ces courtes expressions arithmétiques aident à repérer cette évaluation dans un environnement de test autorisé ; la syntaxe varie selon les moteurs et ne permet pas à elle seule de les identifier sûrement.
Questions fréquentes
Non. L’injection de template côté client s’exécute dans le navigateur de la victime et peut constituer une variante de XSS. La SSTI est évaluée sur le serveur, dans le processus de l’application. Son impact dépend du moteur et des capacités exposées ; certaines configurations permettent l’exécution de code serveur, mais ce n’est pas automatique.
Non. L’auto-échappement assainit les valeurs rendues ; il n’empêche pas qu’une valeur soit analysée comme syntaxe de template. Il protège contre le XSS dans la sortie, pas contre l’injection dans la source du template.
Traitez la source de template fournie par l’utilisateur comme une logique exécutable et, par défaut, ne l’exécutez pas dans le contexte principal de l’application. Si cette fonctionnalité est nécessaire, utilisez un moteur conçu pour les templates restreints, n’exposez que des données inertes minimales et imposez des limites de processeur, mémoire, taille de sortie et durée. Un sandbox réduit les accès, mais ne constitue pas à lui seul une frontière de sécurité complète.
Références
- CWE-1336 — Improper Neutralization of Special Elements Used in a Template Engine
- PortSwigger Web Security Academy — server-side template injection
- OWASP Testing Guide — testing for SSTI
- Is Jinja2's render_template_string() safe?
- Are Freemarker and Velocity templates safe with user input?
- Jinja documentation — Sandbox security considerations