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

Stored Cross-site Scripting en Pentestify permite ejecución de JavaScript mediante enlaces Markdown en los campos de informe

S0
Secur0 CNA
CVE-2026-19744

Descripción

Improper Neutralization of Input During Web Page Generation (Cross-site Scripting) (CWE-79), de tipo almacenado, en el renderizador de Markdown del frontend (markdownToHtml, js/app.js), expuesto en los campos de texto de hallazgos e informes y renderizado en la Vista Previa del informe, en Pentestify 2.3.1, que permite a un usuario autenticado ejecutar JavaScript arbitrario en el origen de la aplicación mediante un enlace Markdown con una comilla doble en la URL, debido a que el paso de saneado de la función escapa &, < y > pero no las comillas (js/app.js:592), mientras que el paso de conversión de enlaces interpola la URL dentro del atributo href de un ancla (js/app.js:601), de modo que una comilla doble en la URL cierra el atributo y permite añadir manejadores de eventos arbitrarios al elemento, cuyo HTML resultante se inserta mediante innerHTML sin saneado posterior. El defecto reside en un único punto de saneado compartido por todos los campos que se renderizan a través de esa función: description, poc, impact, remediation y retest_notes en los hallazgos, y incidents_text, audit_summary, tests_performed, recommended_solutions y methodology_notes en el informe. Esto resulta en la ejecución de JavaScript arbitrario en el origen de la aplicación, en el navegador del usuario que visualiza el informe. La cookie de sesión de la aplicación se emite con el atributo HttpOnly y no es accesible desde el script.

Tipo de vulnerabilidad (CWE)

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

Versiones afectadas

Pentestify anteriores a 2.3.2 (corregido en 2.3.2 por el commit 272f7d6, de fecha 2026-07-17). La función markdownToHtml se introdujo en el commit e421fcc (2026-06-27), en la versión 2.1.0, y el sumidero estuvo presente en las etiquetas v2.2.0 y v2.3.0, por lo que sí hubo releases etiquetadas distribuidas 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 2.3.2 o superior.

Parche

Commit 272f7d6

Créditos

  • Jaime Ramírez - finder (descubridor)
  • Xoán M. Otero Jorge - 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-19744