Saltar al contenido
CVE-2026-114519 ·
Alta · 22 de octubre de 2026

Falta de autorización en la API de usuarios de Prospero Flow CRM permite a un usuario con rol básico leer y eliminar otras cuentas

S0
Secur0 CNA
CVE-2026-114519

Descripción

Falta de autorización (CWE-862) en la API de usuarios de Roskus Prospero Flow CRM, en UserReadController::read() y UserDeleteController::delete() (app/Http/Controllers/Api/User/), en Prospero Flow CRM desde 2.0.0 y anterior a 5.26.0. Un usuario con rol básico puede consultar las cuentas de otros usuarios de su misma compañía, incluidas cuentas con mayores privilegios como CompanyAdmin, y en las versiones desde 3.5.0 puede eliminarlas.

Las rutas GET /api/user/{id} y DELETE /api/user/{id} en routes/api.php llevan únicamente el middleware auth:api, que comprueba que un JSON Web Token sea válido y nada más. Ninguno de los dos controladores comprueba un permiso, una policy ni un rol antes de actuar, por lo que disponer de cualquier token válido de la instalación es el único requisito.

El acceso a los objetos está delimitado por compañía. La ruta de lectura limita la consulta a la compañía del usuario autenticado, y la ruta de eliminación compara la compañía de la cuenta objetivo con la del usuario autenticado. Lo que falta es la comprobación de permisos, no la delimitación de los objetos.

La ruta de eliminación omite esa comparación de compañía cuando la compañía del usuario autenticado es Company::DEFAULT_COMPANY. Un usuario con rol básico de esa compañía puede por tanto eliminar cualquier cuenta de cualquier compañía de la instalación.

El atacante obtiene los datos personales que constan en las demás cuentas, incluidos dirección de correo, número de teléfono, dirección postal e IBAN, y puede eliminar cuentas sobre las que no tiene permiso de gestión. La última cuenta administrativa de una compañía puede ser eliminada.

Tipo de vulnerabilidad (CWE)

  • CWE-862: Falta de autorización

Versiones afectadas

Prospero Flow CRM desde 2.0.0 y anterior a 5.26.0. El endpoint de lectura está presente desde la primera versión que registra un número, 2.0.0; el endpoint de eliminación se añade en 3.5.0. Están afectadas todas las versiones desde 2.0.0 hasta 5.25.x, ambas incluidas. Estado por defecto: no afectado.

Las versiones son los valores registrados en version.php. Las etiquetas de git del repositorio no se corresponden con ellos, por lo que no sirven para identificar una versión afectada: la etiqueta v1.0.0 está fechada en junio de 2024 y contiene la versión 3.9.8. Ninguna etiqueta corresponde a la versión corregida.

Puntuación (CVSS 4.0)

Alta (8.6)

CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N

Los privilegios requeridos son Bajos porque el atacante necesita una cuenta válida en la instalación, sin ningún permiso sobre las cuentas que consulta o elimina. La interacción del usuario es Ninguna porque el atacante actúa por sí solo contra la API. La confidencialidad del sistema vulnerable es Alta porque los registros devueltos incluyen los datos personales de los demás usuarios, el IBAN entre ellos en todas las versiones afectadas. La integridad del sistema vulnerable es Alta porque la eliminación destruye cuentas y los datos que constan en ellas, conforme a la regla de que las operaciones de creación, modificación y eliminación se puntúan en integridad. La disponibilidad es Ninguna porque la aplicación sigue prestando servicio: la eliminación retira registros, no detiene el servicio. Las métricas del sistema subsiguiente son Ninguna, ya que la comprobación ausente es autorización interna de la aplicación y un límite de compañía dentro de ella no constituye un sistema distinto.

Solución

Actualizar a Prospero Flow CRM 5.26.0 o posterior.

Ningún ajuste de las versiones afectadas exige el permiso read user ni delete user en estas rutas, por lo que no puede corregirse únicamente mediante configuración.

Parche

Commit 52cd172c, publicado en 5.26.0. Añade ->can('read user') y ->can('delete user') a las rutas de usuario en routes/api.php, de modo que la autorización se exige antes de que se ejecute cualquiera de los dos controladores, y elimina la excepción Company::DEFAULT_COMPANY de la ruta de eliminación. Fija el guard de permisos de Spatie a web para que los permisos de rol se resuelvan en las peticiones autenticadas por token, sin lo cual las nuevas comprobaciones de ruta no se evaluarían, e impide que una cuenta que no sea SuperAdmin elimine o modifique una cuenta SuperAdmin. El mismo commit protege además otras rutas de la API que quedan fuera del alcance de este registro.

Créditos

  • Carlos Caminero Abad - descubridor
  • Darío Rivas - analista
  • Xoán M. Otero Jorge - analista
  • Secur0 CNA - coordinador
  • Gustavo Novaro - desarrollador de la corrección

Origen del descubrimiento: Externo

Registro oficial: CVE-2026-114519

Registros relacionados

  • CVE-2026-78365 - falta de autorización en la API de proveedores de la misma aplicación, corregida en 5.3.2