XSS almacenado en Pentestify mediante imágenes de findings y logo de cliente sin sanitizar
Descripción
Stored Cross-site Scripting (CWE-79) en las funciones de renderizado en cliente renderPreview(), renderEditor() y renderAuditData() de js/app.js en Pentestify <1.1.0, que permite a un atacante remoto y autenticado ejecutar JavaScript arbitrario en el navegador de cualquier usuario que abra un reporte, debido a que los valores del array images de un finding y del array client_logo de un report se interpolan directamente en el atributo src de etiquetas <img> mediante template literals sin escapar (por ejemplo <img src="${img}">), a diferencia de los campos de texto, que sí pasan por la función escapeHTML() de la aplicación. Un atacante almacena un payload como x" onerror="..." a través de la API REST (POST /api/reports/{id}/findings); se persiste sin sanitizar y se ejecuta cuando cualquier otro usuario, incluidos administradores, visualiza el reporte afectado. Esto resulta en la ejecución de JavaScript arbitrario en el contexto de la aplicación en el navegador de la víctima.
Tipo de vulnerabilidad (CWE)
CWE-79: Improper Neutralization of Input During Web Page Generation (Cross-site Scripting)
Versiones afectadas
Pentestify anteriores a 1.1.0 (todas las versiones anteriores a la 1.1.0, incluida la 1.0.0). El fallo está presente desde antes de la versión 1.0.0 y se corrigió en la 1.1.0. Estado por defecto: no afectado.
Puntuación (CVSS 4.0)
Media
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:L/SA:N
Solución
Actualizar a la versión 1.1.0 o superior.
Parche
Commit a058a22
Créditos
- Marcos García (s3ntinl) - finder (descubridor)
- Mario Álvarez Fernández - analyst and remediation developer (analista y desarrollador de la corrección)
- Xoán M. Otero Jorge - analyst (analista)
- Secur0 CNA - coordinator (coordinador) Origen del descubrimiento: Externo Registro oficial: CVE-2026-59238