
CVE-2025-64087 (SSTI)
Aperçu de la vulnérabilité
L'injection de modèle côté serveur (SSTI) est une vulnérabilité de sécurité Web qui permet à un attaquant d'injecter du code malveillant dans les modèles (templates) utilisés par les systèmes de gestion de contenu (CMS) et les frameworks Web, afin d'exécuter des attaques à distance, de récupérer des informations sensibles ou de mener des activités d'intrusion dans le système.
SSTI est une variante de la vulnérabilité d'injection (comme l'injection SQL, XSS, etc.), dans laquelle un attaquant exploite l'utilisation de systèmes de modèles pour déployer du code malveillant à distance. Lorsqu'une attaque SSTI réussit, l'attaquant peut exécuter son propre code sur le serveur côté serveur, ce qui lui permet de mener des attaques à distance, telles que la collecte d'informations sensibles, la réalisation d'activités d'intrusion dans le système et l'accès à des ressources non autorisées.
La vulnérabilité SSTI survient généralement en raison de l'utilisation de systèmes de modèles non sécurisés, ou de l'absence de vérification et de traitement des paramètres d'entrée avant de les insérer dans les modèles. Si une attaque SSTI réussit, les conséquences peuvent être graves et causer des dommages importants à l'organisation ciblée.
Impact commercial
La vulnérabilité SSTI peut entraîner de nombreuses conséquences graves, notamment :
Exécution de code malveillant : L'attaquant peut utiliser cette vulnérabilité pour exécuter du code malveillant sur le serveur, lui permettant de voler des données, d'effectuer des actions illégales sur le système, voire de prendre le contrôle complet du serveur.
Divulgation d'informations sensibles : SSTI peut permettre à un attaquant de lire, modifier ou supprimer des fichiers sur le serveur. Si ces fichiers contiennent des informations sensibles, comme des comptes et des mots de passe, l'attaquant peut facilement divulguer ces informations.
Attaque par menaces ou hameçonnage des utilisateurs : L'attaquant peut utiliser SSTI pour mener des attaques par menaces ou hameçonnage des utilisateurs, en modifiant le contenu du site Web ou en ajoutant de faux boutons personnalisés. Si les utilisateurs cliquent sur ces boutons, l'attaquant peut voler leurs informations ou installer des logiciels malveillants sur leurs ordinateurs.
Une vulnérabilité d'injection de modèle côté serveur (SSTI) a été découverte dans OpenSAGRES XDocReport lors du traitement de modèles DOCX avec le moteur FreeMarker. Sous certaines configurations, des modèles fabriqués peuvent conduire à une exécution de code à distance (RCE).
Le site Web de gestion des ressources humaines permet aux utilisateurs de télécharger des fichiers documents .docx sur le système. Lors du traitement, l'application utilise le moteur de modèles FreeMarker (dans le fichier FreemarkerTemplateEngine.java) pour interpréter le contenu ${"freemarker.template.utility.Execute"?new()("whoami")} sans mécanisme de contrôle ou de filtrage du contenu d'entrée.
Cette vulnérabilité permet à un attaquant d'injecter des expressions malveillantes dans le fichier .docx (modèle), conduisant à une exécution de code à distance (RCE) sur le serveur, et pouvant être exploitée pour voler des informations ou prendre le contrôle du système.
fr.opensagres.xdocreport.template.freemarker — XDocReport (versions 1.0.0 à 2.1.0).
https://github.com/opensagres/xdocreport/blob/master/template/fr.opensagres.xdocreport.template.freemarker/src/main/java/fr/opensagres/xdocreport/template/freemarker/FreemarkerTemplateEngine.java n'effectue aucune vérification du contenu du fichier xdoc d'entrée. Le contenu du modèle est chargé directement et passé à process(context, writer, template) pour être traité par le moteur FreeMarker sans aucun mécanisme de sandboxing ni restriction des directives/expressions. En conséquence, un attaquant peut fournir un modèle contenant des expressions/commandes FreeMarker malveillantes, conduisant à une exécution de code à distance (RCE)..docx dont le contenu interne est la charge utile suivante :```
${"freemarker.template.utility.Execute"?new()("calc")}
2. On constate qu'il est possible d'exécuter avec succès et d'ouvrir l'application calculatrice

3. De même, pour récupérer les informations de l'utilisateur en cours d'exécution sur le système avec le payload :```
${"freemarker.template.utility.Execute"?new()("whoami")}
.docx, après traitement par le moteur de template, a renvoyé les données du système


6. Augmenter l'impact vers RCE
- La machine d'écoute est wsl avec l'adresse IP `172.26.208.130`

- exploitation avec le payload suivant :