
Divulgazione tecnica di una vulnerabilità critica di SQL injection blind basata sul tempo (CVE-2025-68400) in ChurchCRM, inclusa l'analisi del codice vulnerabile, la proof-of-concept e la valutazione dell'impatto per i team di sicurezza difensiva.
| Campo | Dettagli |
|---|
| CVE ID | CVE-2025-68400 |
| Gravità | CRITICA |
| Avviso | Visualizza Avviso |
| Scoperta da | Lukasz Rybak |
Esiste una vulnerabilità critica di SQL Injection nell'endpoint legacy /Reports/ConfirmReportEmail.php in ChurchCRM 6.3.0. Sebbene la funzionalità sia stata rimossa dall'interfaccia utente, il file rimane distribuito e raggiungibile direttamente tramite URL. Questo è un classico caso di codice morto ma raggiungibile. Qualsiasi utente autenticato - incluso uno senza alcun permesso assegnato - può sfruttare la SQL injection tramite il parametro familyId.
Il problema si trova in:
src/Reports/ConfirmReportEmail.php
Codice vulnerabile (righe 82–83):
if (InputUtils::legacyFilterInput($_GET['familyId'], 'int')) {
$sSubQuery = ' and fam_id in (' . $_GET['familyId'] . ') ';
}
Perché è vulnerabile:
legacyFilterInput() viene completamente ignorato.$_GET['familyId'] viene concatenato direttamente in una query SQL.Endpoint morto ma raggiungibile:
/Reports/ConfirmReportEmail.php?familyId=<value>
Comportamento normale:
302 Redirect → /v2/family/<id>&PDFEmailed=
I payload malevoli contenenti ) o -- interrompono la logica di redirect ed eseguono la SQL vulnerabile.
Anche un utente con zero permessi può sfruttare la vulnerabilità.
Un payload SLEEP(5) ritarda in modo affidabile la risposta, dimostrando l'esecuzione della SQL.
Un utente autenticato visita:
http://localhost:8101/Reports/ConfirmReportEmail.php?familyId=1)%20AND%20(SELECT%201%20FROM%20(SELECT(SLEEP(5)))a)%20--%20-

Risultato osservato:
Conferma sqlmap:

Questa CVE è stata divulgata in modo responsabile seguendo le pratiche di divulgazione coordinata delle vulnerabilità. Le informazioni qui fornite hanno esclusivamente finalità educative e difensive.