CSRF en Prospero Flow CRM en la confirmación de pedidos permite cambios de estado no autorizados
Descripción
Cross-Site Request Forgery (CSRF) en OrderConfirmController::confirm() (app/Http/Controllers/Order/OrderConfirmController.php), expuesto en GET /order/confirm/{order_number}, en Prospero Flow CRM anteriores a 5.15.11, que permite a un atacante no autenticado confirmar cualquier pedido en nombre de un usuario autenticado induciéndolo a visitar una página maliciosa que contenga un enlace o elemento de navegación diseñado a tal efecto, debido a que el middleware VerifyCsrfToken de Laravel únicamente exige la validación del token CSRF en peticiones POST, PUT, PATCH y DELETE, mientras que la declaración Route::get de esta acción que modifica estado queda completamente desprotegida. Las cookies de sesión configuradas con SameSite=Lax se incluyen automáticamente en las navegaciones de nivel superior entre sitios (por ejemplo, al hacer clic en un enlace), de modo que un único clic en un enlace controlado por el atacante ejecuta OrderConfirmController::confirm() y transiciona el pedido objetivo de pending a confirmed sin autorización del usuario. Dado que los números de pedido son enteros secuenciales y predecibles, un atacante puede enumerar y confirmar todos los pedidos existentes en la plataforma de forma automatizada en un único barrido.
Tipo de vulnerabilidad (CWE)
CWE-352: Cross-Site Request Forgery (CSRF)
Versiones afectadas
Prospero Flow CRM en todas las versiones anteriores a 5.15.11. La ruta vulnerable Route::get('/order/confirm/{id}', ...) está presente desde la etiqueta v1.0.0 (2 de junio de 2024) y en todas las etiquetas publicadas posteriores: v2.0.1, v4.6.0, v5.5.3 y v5.14.0. La versión corregida 5.15.11 no está etiquetada y ninguna release publicada incorpora la corrección. Estado por defecto: no afectado.
Puntuación (CVSS 4.0)
Media (5.1)
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N
Solución
Actualizar a la versión 5.15.11 o superior desplegando desde la rama principal: la corrección no está etiquetada y la última release disponible, v5.14.0, no la incorpora. La corrección convierte la ruta de Route::get a Route::post y añade el token @csrf al formulario de confirmación de pedido en resources/views/order/index.blade.php.
Parche
Commit a90c0c8c
Créditos
- Darío Chacón - finder (descubridor)
- Mario Álvarez - finder (descubridor)
- Darío Rivas Quero - analyst (analista)
- Cristian Fernández Cornejo - analyst (analista)
- Secur0 CNA - coordinator (coordinador)
- Gustavo Novaro - remediation developer (desarrollador de la corrección)
Origen del descubrimiento: Externo
Registro oficial: CVE-2026-82911