Skip to content

Description

Les failles d'injection de modèles côté serveur (SSTI) se produisent lorsque les entrées utilisateur sont directement intégrées dans des templates sans validation ou échappement adéquat. Cela permet à un attaquant d'injecter du code malveillant qui sera exécuté sur le serveur, conduisant à des compromissions de sécurité graves, y compris l'exécution de commandes arbitraires et la divulgation de données sensibles.


Exemple d'Attaque SSTI

Scénario d'attaque :

  • Une application web utilise un moteur de template pour générer dynamiquement du contenu basé sur les entrées utilisateur, par exemple, un moteur de template Jinja2 dans une application Flask.

Exemple de code vulnérable :

python
from flask import Flask, request, render_template_string

app = Flask(__name__)

@app.route('/greet', methods=['POST'])
def greet():
    name = request.form['name']
    template = f"Hello {name}!"
    return render_template_string(template)

Exploitation :

  • Un attaquant peut manipuler les entrées pour injecter du code malveillant dans le template, par exemple en entrant 49 comme nom.
http
POST /greet HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded

name={{ 7*7 }}
  • Le template rendu afficherait alors Hello 49!, indiquant que le code a été exécuté.

Prévention des Attaques SSTI

Échappement des Entrées Utilisateur :

  • Utiliser des fonctions d'échappement fournies par le moteur de template pour s'assurer que les entrées utilisateur sont traitées comme du texte brut.
python
from flask import escape

@app.route('/greet', methods=['POST'])
def greet():
    name = escape(request.form['name'])
    template = f"Hello {name}!"
    return render_template_string(template)

Utilisation de Templates Sécurisés :

  • Utiliser des méthodes sécurisées pour rendre les templates qui ne permettent pas l'injection de code.
python
@app.route('/greet', methods=['POST'])
def greet():
    name = request.form['name']
    return render_template('greet.html', name=name)

Validation et Sanitation des Entrées :

  • Valider et assainir toutes les entrées utilisateur pour s'assurer qu'elles ne contiennent pas de code malveillant.
python
@app.route('/greet', methods=['POST'])
def greet():
    name = request.form['name']
    if not name.isalnum():
        return "Invalid input!"
    return render_template('greet.html', name=name)

Détection des Failles SSTI

Revue de Code :

  • Examiner le code source pour identifier les endroits où des entrées utilisateur sont directement intégrées dans des templates sans validation ou échappement adéquat.

Tests Manuels :

  • Effectuer des tests manuels en manipulant les entrées pour injecter des payloads SSTI et vérifier la présence de vulnérabilités.

Utilisation d'Outils de Sécurité :

  • Utiliser des outils de sécurité tels que Burp Suite, OWASP ZAP, ou des scanners spécifiques pour détecter les failles SSTI.

Exemples de Prévention

Échappement avec Jinja2 :

python
from jinja2 import Environment, escape

env = Environment(autoescape=True)
template = env.from_string("Hello {{ name }}!")
rendered_template = template.render(name=name)

Validation stricte des Entrées :

python
@app.route('/greet', methods=['POST'])
def greet():
    name = request.form['name']
    if not name.isalnum():
        return "Invalid input!"
    return render_template('greet.html', name=name)

Utilisation de Méthodes Sécurisées :

python
@app.route('/greet', methods=['POST'])
def greet():
    name = request.form['name']
    return render_template('greet.html', name=name)

Voici les informations complètes et formatées pour les failles d'Upload de Fichiers et Server-Side Template Injection (SSTI).


CatégorieInformation
TTPExploiter les moteurs de template côté serveur pour injecter du code malveillant
CWECWE-94 (Improper Control of Generation of Code ('Code Injection'))
Description de l'attaqueSSTI se produit lorsqu'un moteur de template côté serveur permet à un attaquant d'injecter des expressions de template malveillantes, ce qui peut conduire à l'exécution de code arbitraire, l'exfiltration de données, ou d'autres actions non autorisées.
Impacts potentiels- Exécution de code arbitraire sur le serveur
- Divulgation de données sensibles
- Compromission totale du serveur
- Déni de service (DoS)
Comment la détecter- Analyse de code pour les entrées utilisateur injectées dans les templates
- Tests de pénétration pour identifier les points d'injection de template
- Utilisation d'outils de scan de sécurité pour détecter les vulnérabilités SSTI
Remédiations/mitigations- Éviter d'injecter des entrées utilisateur directement dans les templates
- Utiliser des moteurs de template sécurisés qui n'exposent pas de fonctionnalités d'exécution de code
- Valider et échapper toutes les entrées utilisateur
- Mettre en place des politiques de sécurité de contenu strictes
Lien de référenceOWASP - Server-Side Template Injection (SSTI)