Saltar al contenido
CVE-2026-19870 ·
Alta · 14 de agosto de 2026

IDOR en Prospero Flow CRM permite lectura y creación de nóminas entre empresas

S0
Secur0 CNA
CVE-2026-19870

Descripción

Authorization Bypass Through User-Controlled Key (CWE-639) y Missing Authorization (CWE-862) en el módulo de nóminas (PayrollIndexController y PayrollRequest), expuestos en GET /payroll y POST /payroll/save, en Prospero Flow CRM 5.15.9, que permiten a un usuario autenticado con el permiso read payroll visualizar las nóminas de empleados de cualquier otra empresa de la instancia (importe bruto, importe neto, IBAN, fecha de pago y notas) y, con el permiso create payroll, crear registros de nómina atribuidos a empleados de otra empresa, debido a que la consulta base del listado se construía como Payroll::where('period_year', $year) sin restricción por empresa, aplicándose el filtro whereHas sobre company_id únicamente dentro de la rama condicional que se ejecuta al filtrar por un empleado concreto, de modo que la carga del listado sin filtros devolvía los registros de todas las empresas, y a que PayrollRequest validaba el campo user_id con la regla exists:user,id, que comprueba la existencia global del identificador y no su pertenencia a la empresa del usuario autenticado, a diferencia del resto de módulos del proyecto, que acotan sistemáticamente sus consultas por company_id. Esto resulta en la divulgación de los datos salariales y bancarios de empleados ajenos a la organización del atacante, y en la inserción de registros de nómina fabricados que aparecen en el listado de la empresa víctima sin distinguirse de los legítimos.

Tipo de vulnerabilidad (CWE)

CWE-639: Authorization Bypass Through User-Controlled Key

CWE-862: Missing Authorization

Versiones afectadas

Prospero Flow CRM anteriores a 5.15.10 (corregido en 5.15.10 por el commit 59644f91, de fecha 2026-07-28). El módulo de nóminas se introdujo en el commit 5804831d (2024-02-12), en la versión 3.7.2, y el fallo estuvo presente en las etiquetas v4.6.0, v5.5.3 y v5.14.0, por lo que sí hubo releases etiquetadas distribuidas en estado vulnerable. Las versiones se leen de la constante APP_VERSION en version.php. Estado por defecto: no afectado.

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

Solución

Actualizar a la versión 5.15.10 o superior. La corrección no está incluida en ninguna release etiquetada: la última etiqueta del repositorio es v5.14.0, anterior a la corrección.

Parche

Commit 59644f91

Créditos

  • Manuel Martínez Casasola - finder (descubridor)
  • Cristian Fernández Cornejo - analyst (analista)
  • Xoán M. Otero Jorge - analyst (analista)
  • Secur0 CNA - coordinator (coordinador)
  • Gustavo Novaro - remediation developer (desarrollador de la corrección) Origen del descubrimiento: Externo Registro oficial: CVE-2026-19870