Comment pouvez-vous tester l’injection de modèles côté serveur ?
Injection de modèles côté serveur (SSTI
Injection de modèles côté serveur (SSTI
SSTI peut avoir de graves répercussions sur la sécurité et les performances d’une application web. En fonction du moteur de modèle et de la configuration du serveur, un attaquant peut utiliser SSTI pour effectuer diverses activités, telles que le vol ou la modification de données de la base de données ou du serveur, l’échappement du bac à sable du modèle et l’exécution de code sur le serveur, le contournement des mécanismes d’authentification et d’autorisation, la création de portes dérobées ou de Web Shells pour un accès persistant, le refus de service aux utilisateurs légitimes ou le plantage du serveur.
Injection Attacks such as SQL,LDAP,XPATH,OS Injections occurs if user input is not handled properly, these attacks hit the DB directly to retrieve/update the content from/to it. The common webserver attacks happen due to raw user input is XSS(Cross Site Scripting) attacks,path traversal and Remote code executions on the server leading to modifying the server content or executing remote commands.
La première étape du test SSTI consiste à identifier le moteur de modèle utilisé par l’application web. Vous pouvez le faire en regardant les extensions de fichiers, la syntaxe ou les messages d’erreur des pages Web. Par exemple, Jinja2 utilise des extensions .html ou .j2, Twig utilise des extensions .twig et Freemarker utilise des extensions .ftl. Vous pouvez également utiliser des outils tels que Wappalyzer ou BuiltWith pour détecter le moteur de modèle.
L’étape suivante consiste à rechercher les points d’entrée utilisateur qui sont reflétés dans les pages Web, tels que les zones de recherche, les formulaires ou les paramètres d’URL. Vous pouvez ensuite essayer d’injecter des expressions ou des directives de modèle spécifiques au moteur de modèle et observer la réponse. Par exemple, vous pouvez essayer d’injecter {{7*7}} pour Jinja2 ou Twig, ou ${7*7} pour Freemarker, et voyez si le résultat est 49.
In case of a vulnerability, an error message can be returned or the exception can be raised by the server. This can be used to identify the vulnerability and the template engine in use. To identify the vulnerability, the following to-do list can be followed: Detect where the template injection exist Identify the template engine and validate the vulnerability Follow the manuals for the specific template engine Exploit the vulnerability
Si vous confirmez que l’application Web est vulnérable à SSTI, vous pouvez essayer d’intensifier votre attaque et d’obtenir plus de contrôle sur le serveur. En fonction du moteur de template et de l’environnement du serveur, il existe différentes méthodes d’exploitation, telles que l’utilisation de fonctions ou de filtres intégrés pour accéder ou modifier des variables, des objets ou des fichiers ; l’héritage ou l’inclusion de modèles pour charger ou exécuter des fichiers ou des modèles externes ; la concaténation ou l’évaluation de chaînes de caractères pour exécuter du code ou des commandes arbitraires ; et des techniques d’échappement de bac à sable pour contourner les restrictions ou les fonctionnalités de sécurité. À titre d’exemple, vous pouvez tenter d’injecter {{config.items()}} pour Jinja2 ou {{_self.env.registerUndefinedFilterCallback(« exec »)}}{{_self.env.getFilter(« id »)}} pour Twig, afin d’exécuter des commandes sur le serveur.
Pour éviter SSTI, vous devez utiliser un moteur de modèle sécurisé doté d’un mode bac à sable, d’une syntaxe stricte et d’un ensemble limité de fonctionnalités. De plus, il est important d’assainir et de valider toutes les entrées de l’utilisateur avant de les transmettre au moteur de modèle. L’encodage ou l’échappement de sortie peut aider à empêcher le cross-site scripting (XSS) ou l’injection HTML, tandis que les requêtes paramétrées ou les instructions préparées peuvent être utilisées pour éviter l’injection SQL. En outre, des autorisations de fichiers sécurisées et des politiques de contrôle d’accès doivent être mises en œuvre pour limiter l’exposition des fichiers ou des répertoires sensibles. Enfin, les pare-feu, les antivirus ou les systèmes de détection d’intrusion peuvent être utilisés pour surveiller et bloquer le trafic malveillant.
There are 2 common suggestions to remediate this vulnerability: Sanitization: Sanitize user input before passing it into the templates to minimize vulnerabilities from any malicious. Sandboxing: In case using risky characters is a business need, it is recommended to use a sandbox within a safe environment.
Si vous souhaitez en savoir plus sur SSTI, vous pouvez utiliser l’aide-mémoire OWASP SSTI, qui est un guide complet sur la détection et l’exploitation de SSTI. De plus, la PortSwigger Web Security Academy est une plate-forme en ligne gratuite avec des laboratoires interactifs et des tutoriels sur SSTI et d’autres sujets liés à la sécurité Web. Enfin, HackerOne Hacktivity est une collection de rapports et d’articles du monde réel sur SSTI et d’autres vulnérabilités Web. Toutes ces ressources sont inestimables pour rester à jour sur le sujet complexe et en constante évolution de la SSTI.