Carga sin restricciones de archivos de tipo peligroso en Prospero Flow CRM permite cross-site scripting almacenado mediante SVG
Descripción
Unrestricted Upload of File with Dangerous Type (CWE-434) e Improper Neutralization of Input During Web Page Generation (CWE-79) en CompanySaveController::save() (app/Http/Controllers/Company/CompanySaveController.php), expuesto en POST /company/save, en Prospero Flow CRM anteriores a 5.15.13, que permite a un usuario autenticado que posee los permisos create company y update company ejecutar JavaScript arbitrario en el origen de la aplicación contra cualquier visitante que abra el archivo, incluidos los visitantes no autenticados, mediante la carga como logotipo de empresa de un documento SVG con un elemento <script> embebido, debido a que el controlador no aplica validación alguna de tipo, extensión ni tamaño sobre el campo logo y compone el nombre de destino a partir de la extensión deducida del contenido antes de invocar storeAs() sobre el disco public, que el proyecto sirve de forma estática bajo /storage/company/{slug}/{archivo} sin pasar por el enrutado de Laravel y por tanto sin middleware de autenticación, a diferencia de ProductRequest::rules(), que restringe la carga equivalente de imagen con la regla image y la lista blanca mimes:jpeg,png,jpg,gif. Esto resulta en la ejecución de JavaScript arbitrario en el contexto de la aplicación al navegar directamente al archivo almacenado.
Tipo de vulnerabilidad (CWE)
CWE-434: Unrestricted Upload of File with Dangerous Type
CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
Versiones afectadas
Prospero Flow CRM anteriores a 5.15.13. La carga del logotipo de empresa se introdujo en el commit dbd8f149 (2022-08-07), anterior a la incorporación de la constante de versión al proyecto, por lo que todas las versiones publicadas están afectadas. Las cinco etiquetas existentes (v1.0.0, v2.0.1, v4.6.0, v5.5.3 y v5.14.0) se publicaron vulnerables. La corrección no está etiquetada y v5.14.0 sigue siendo la etiqueta más reciente del repositorio, por lo que ninguna release etiquetada la incorpora. Estado por defecto: no afectado.
Puntuación (CVSS 4.0)
Media (4.8)
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:A/VC:N/VI:L/VA:N/SC:N/SI:L/SA:N
Solución
Actualizar a la versión 5.15.13 o superior. Ninguna etiqueta git incorpora la corrección, de modo que es necesario desplegar desde la rama principal del repositorio: instalar v5.14.0, la etiqueta más reciente, deja el sistema afectado. La corrección valida las cargas posteriores pero no retira los archivos ya escritos, por lo que conviene revisar storage/app/public/company/ y eliminar los documentos SVG existentes.
Parche
Commit aaa4fc76
Créditos
- Adrián García López - finder (descubridor)
- Darío Rivas Quero - 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-78337