Saltar al contenido
CVE-2026-77780 ·
Media · 21 de agosto de 2026

Claves ajenas de cuenta y tarjeta bancaria sin validar en el guardado de transacciones de Prospero Flow CRM permiten divulgar datos bancarios de otras empresas

S0
Secur0 CNA
CVE-2026-77780

Descripción

Authorization Bypass Through User-Controlled Key (CWE-639) en TransactionSaveController::save() (app/Http/Controllers/Transaction/TransactionSaveController.php) y en TransactionSaveRequest::rules() (app/Http/Requests/TransactionSaveRequest.php), expuesto en POST /transaction/save, en Prospero Flow CRM 4.9.1 hasta 5.14.0 incluida, que permite a un usuario cuyo rol otorga los permisos de creación de transacciones y de contabilidad enlazar su propia transacción con una cuenta bancaria o una tarjeta pertenecientes a otra empresa alojada en la misma instancia, debido a que bank_account_id y bank_card_id se validaban únicamente como ['nullable', 'integer'] y fill() los persistía sin comprobar la pertenencia a company_id, a diferencia de la propia fila de la transacción, cuyo company_id sí se fija desde Auth::user(). La restricción a los registros propios existía solo en los desplegables del formulario (resources/views/transaction/transaction.blade.php), de modo que enviar directamente un identificador no listado la elude por completo. Al renderizar el listado, TransactionIndexController carga las relaciones bankAccount.bank y bankCard.bankAccount.bank, que son belongsTo sin acotar por empresa, y resources/views/transaction/index.blade.php imprime el nombre de la cuenta, el nombre del banco y, si se enlazó una tarjeta, sus cuatro últimos dígitos. Los identificadores son enteros secuenciales, por lo que recorrer el rango permite repetir la operación sobre el resto de empresas. Esto resulta en la divulgación entre empresas de identificadores bancarios ajenos dentro del propio listado de contabilidad del atacante, sin ninguna interacción por parte de la víctima.

Tipo de vulnerabilidad (CWE)

CWE-639: Authorization Bypass Through User-Controlled Key

Versiones afectadas

Prospero Flow CRM desde 4.9.1 hasta 5.14.0 incluida. Las claves ajenas bank_account_id y bank_card_id se añadieron al guardado de contabilidad en el commit a9c4845f, que fijó APP_VERSION en 4.9.1, ya con la regla ['nullable', 'integer']; las versiones anteriores no aceptan esos campos. La etiqueta v4.6.0 es previa a la introducción y no está afectada, mientras que las etiquetas v5.5.3 y v5.14.0 incorporan el fallo. La corrección eleva la versión a 5.14.2, que no está etiquetada: v5.14.0 sigue siendo la etiqueta más reciente del repositorio, de modo que ninguna release etiquetada incorpora todavía la corrección. La versión 5.14.1 no existe. Estado por defecto: no afectado.

Puntuación (CVSS 4.0)

Media (5.3)

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

Solución

Actualizar a la versión 5.14.2 o superior. La corrección no está etiquetada, por lo que instalar la última etiqueta disponible (v5.14.0) deja el sistema afectado: es necesario partir del commit 5fd1fe86 o de una versión posterior a 5.14.2. La corrección valida la pertenencia en el momento de escribir, pero no revisa las filas ya almacenadas ni acota las relaciones bankAccount() y bankCard() en lectura, por lo que conviene revisar las transacciones existentes cuyo bank_account_id o bank_card_id apunte a una empresa distinta de la suya.

Parche

Commit 5fd1fe86

Créditos

  • Adrián García López - finder (descubridor)
  • Xoán M. Otero Jorge - analyst (analista)
  • Darío Rivas Quero - analyst (analista)
  • Secur0 CNA - coordinator (coordinador)
  • Gustavo Novaro - remediation developer (desarrollador de la corrección) Origen del descubrimiento: Externo Registro oficial: CVE-2026-77780