
Divulgação técnica de uma vulnerabilidade crítica de injeção SQL cega baseada em tempo (CVE-2025-68400) no ChurchCRM, incluindo análise do código vulnerável, prova de conceito e avaliação de impacto para equipes de segurança defensiva.
| Campo | Detalhes |
|---|
| CVE ID | CVE-2025-68400 |
| Gravidade | CRÍTICA |
| Aviso | Ver Aviso |
| Descoberto por | Lukasz Rybak |
Existe uma vulnerabilidade crítica de injeção de SQL no endpoint legado /Reports/ConfirmReportEmail.php no ChurchCRM 6.3.0. Embora o recurso tenha sido removido da interface, o arquivo permanece implantado e acessível diretamente via URL. Este é um caso clássico de código morto, porém acessível. Qualquer usuário autenticado - inclusive um com zero permissões atribuídas - pode explorar a injeção de SQL por meio do parâmetro familyId.
O problema está localizado em:
src/Reports/ConfirmReportEmail.php
Código vulnerável (linhas 82–83):
if (InputUtils::legacyFilterInput($_GET['familyId'], 'int')) {
$sSubQuery = ' and fam_id in (' . $_GET['familyId'] . ') ';
}
Por que isso é vulnerável:
legacyFilterInput() é totalmente ignorado.$_GET['familyId'] é concatenado diretamente em uma consulta SQL.Endpoint morto, porém acessível:
/Reports/ConfirmReportEmail.php?familyId=<value>
Comportamento normal:
302 Redirect → /v2/family/<id>&PDFEmailed=
Payloads maliciosos contendo ) ou -- quebram a lógica de redirecionamento e executam o SQL vulnerável.
Até um usuário com zero permissões pode explorar a vulnerabilidade.
Um payload SLEEP(5) atrasa a resposta de forma confiável, comprovando a execução de SQL.
Usuário autenticado acessa:
http://localhost:8101/Reports/ConfirmReportEmail.php?familyId=1)%20AND%20(SELECT%201%20FROM%20(SELECT(SLEEP(5)))a)%20--%20-

Resultado observado:
Confirmação com sqlmap:

Este CVE foi divulgado de forma responsável, seguindo práticas coordenadas de divulgação de vulnerabilidades. As informações aqui fornecidas são apenas para fins educacionais e defensivos.