Saltar al contenido
CVE-2026-19716 ·
Media · 13 de agosto de 2026

Stored Cross-site Scripting en Pentestify permite ejecución de JavaScript mediante el nombre de usuario en el botón de eliminación de cuentas

S0
Secur0 CNA
CVE-2026-19716

Descripción

Improper Neutralization of Input During Web Page Generation (Cross-site Scripting) (CWE-79), de tipo almacenado, en el componente de gestión de usuarios del frontend (js/app.js) y en el esquema de entrada CreateUserRequest (backend/schemas.py), expuesto en POST /api/users y renderizado en la página de Cuenta, en Pentestify 1.1.0, que permite a un usuario autenticado ejecutar JavaScript arbitrario en el navegador de otro usuario autenticado mediante un nombre de usuario manipulado, debido a que el campo username se declaraba como str sin validador ni lista blanca, se persistía tal cual, y el frontend lo interpolaba dentro de un literal de cadena JavaScript en el atributo onclick del botón de eliminación de cuenta (js/app.js:1923), donde el saneado aplicado resultaba inefectivo: escapeHTML() convierte la comilla simple en ' y el replace posterior, destinado a escapar comillas literales, ya no encuentra ninguna, de modo que el analizador HTML decodifica la entidad de vuelta a ' antes de que el motor de JavaScript interprete el manejador, cerrando el literal de cadena e inyectando código ejecutable, a diferencia de la línea 1918 de esa misma vista, que renderiza el mismo valor mediante escapeHTML() en contexto de texto y no es explotable. Esto resulta en la ejecución de JavaScript arbitrario en el origen de la aplicación, en el navegador del usuario que pulsa el botón de eliminación correspondiente a la cuenta manipulada. La prueba de concepto demuestra la ejecución del código inyectado: no demuestra acceso a la sesión ni exfiltración de datos.

Tipo de vulnerabilidad (CWE)

CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

Versiones afectadas

Pentestify anteriores a 1.1.1 (corregido en 1.1.1 por el commit 714e05e, de fecha 2026-06-25). El sumidero se introdujo junto con la gestión de usuarios en el commit 2a1551b (2026-06-20), en la versión 1.0.0, y estuvo presente en las versiones 1.0.0 y 1.1.0. Ninguna de esas versiones tiene etiqueta git: v1.1.1 es la primera etiqueta del repositorio y ya incorpora la corrección, por lo que ninguna release etiquetada se distribuyó en estado vulnerable. Las versiones se leen de la constante APP_VERSION en js/app.js. Estado por defecto: no afectado.

Puntuación (CVSS 4.0)

Media (5.1)

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

Solución

Actualizar a la versión 1.1.1 o superior.

Parche

Commit 714e05e

Créditos

  • Marcos García (s3ntinl) - finder (descubridor)
  • Xoán M. Otero Jorge - analyst (analista)
  • Darío Rivas Quero - analyst (analista)
  • Secur0 CNA - coordinator (coordinador)
  • Mario Álvarez Fernández - remediation developer (desarrollador de la corrección) Origen del descubrimiento: Externo Registro oficial: CVE-2026-19716