Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2025-67906 — MISP <= 2.5.27 - Stored Cross-Site Scripting a través del Workflow Engine (Inyección de Plantilla doT.js). | Kitploit
Herramientas/GitHubGitHub/franckferman/cve-2025-67906
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebExfiltración de DatosRecopilación de InformaciónEvasión de WAFPruebas de PenetraciónRed Teaming
GitHubfranckferman/cve-2025-67906

CVE-2025-67906

MISP <= 2.5.27 - Stored Cross-Site Scripting a través del Workflow Engine (Inyección de Plantilla doT.js).

236hace 6 mesesAún no revisado
Ver Repositorio
Sitio web

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE Score GCVE CWE License Python No deps

CVE-2025-67906

MISP <= 2.5.27 - Cross-Site Scripting Almacenado a través del Motor de Workflow (inyección de plantilla doT.js)

Descubierto por Franck FERMAN

Resumen - Causa Raíz - Cadena de Ataque - Estructura - Uso - Remediación - Referencias


Resumen de la Vulnerabilidad

CVE-2025-67906 (GCVE-1-2025-0031) es una vulnerabilidad de Cross-Site Scripting Almacenado (XSS) en MISP (Plataforma de Intercambio de Información de Malware) versiones hasta la 2.5.27 inclusive.

La vulnerabilidad reside en app/View/Elements/Workflows/executionPath.ctp, el componente de vista de la ruta de ejecución del Workflow. El campo name de los desencadenantes del workflow se persiste en la base de datos sin saneamiento en el lado del servidor y posteriormente se renderiza en el DOM a través del motor de plantillas doT.js sin escape HTML. Un atacante autenticado puede inyectar HTML/JavaScript arbitrario que se ejecuta en la sesión del navegador de cualquier usuario que visualice el workflow comprometido.

Debido a que la carga útil se almacena en la base de datos y se renderiza en cada carga de página, el XSS es persistente: sobrevive a las recargas de página, afecta a múltiples usuarios y persiste hasta que el workflow se elimina explícitamente.

Descubrimiento: Esta vulnerabilidad fue identificada y divulgada de manera responsable por Franck FERMAN.


Puntuaciones CVSS

Existen múltiples evaluaciones CVSS para esta vulnerabilidad:

FuentePuntuaciónSeveridadVector
NIST NVD9.0CríticoCVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H
GCVE (CIRCL)7.1AltoCVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:A/VC:H/VI:N/VA:N/SC:H/SI:H/SA:H
CNA (MITRE)5.4MedioCVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N

La divergencia de puntuaciones refleja diferentes evaluaciones de la profundidad del impacto. La puntuación de NIST NVD (9.0) considera un impacto total en Confidencialidad, Integridad y Disponibilidad, dado que la carga útil XSS se ejecuta con los privilegios de sesión de la víctima, permitiendo la exfiltración de datos a nivel de administrador y la manipulación del workflow. La puntuación CNA (5.4) considera solo un impacto limitado en C/I para un XSS genérico. La puntuación GCVE CVSS 4.0 (7.1) introduce modificadores de Requisitos de Ataque (Privilegio) e Interacción Activa del Usuario.

El Alcance es Cambiado en todas las evaluaciones porque la carga útil del atacante (inyectada a través de la API de MISP) se ejecuta en un contexto de seguridad diferente (la sesión del navegador de la víctima).


Análisis de Causa Raíz

El Vector de Inyección

El Motor de Workflow de MISP permite a los usuarios autenticados crear y editar workflows a través de la API REST. El modelo de datos del workflow incluye un componente trigger con un campo name. Este campo:

  1. Es aceptado por la API sin validación de entrada ni codificación de entidades HTML
  2. Se persiste en la base de datos como texto sin procesar (sin saneamiento del lado del servidor)
  3. Se renderiza en el navegador a través del motor de plantillas JavaScript doT.js

Por qué doT.js es Vulnerable Aquí

doT.js es un motor de plantillas JavaScript rápido. Utiliza {{= }} para interpolación, que no escapa el HTML por defecto. El Editor de Workflow de MISP utiliza doT.js para renderizar metadatos del trigger (incluyendo el campo name) en el DOM. Cuando el campo name contiene HTML como ``, el motor de plantillas lo inserta como HTML sin procesar, y el navegador ejecuta el JavaScript incrustado.

La corrección requiere:

  • Cambiar a la sintaxis de salida codificada de doT.js {{! }} que escapa HTML
  • Saneamiento del lado del servidor antes de la inserción en la base de datos
  • Ambas (defensa en profundidad)

Punto de Inyección

POST /workflows/edit/{id}

{
  "Workflow": {
    "id": "1",
    "data": "{\"1\":{\"data\":{\"name\":\"\"}}}"
  }
}

El valor name dentro del campo JSON data es el punto de inyección. Todo el grafo del workflow se serializa como una cadena JSON dentro del cuerpo de la solicitud.

El Contexto de Renderizado: Motor Gráfico del Lado del Cliente

La vulnerabilidad se amplifica por la elección arquitectónica de utilizar un motor de plantillas del lado del cliente (doT.js) para renderizar el editor visual de workflows. El Editor de Workflow es una interfaz gráfica de arrastrar y soltar donde cada trigger/acción se muestra como un bloque visual. El campo name del trigger se renderiza como una etiqueta dentro de estos bloques gráficos.

doT.js construye los componentes visuales generando cadenas HTML a partir de plantillas e insertándolas en el DOM. La sintaxis de interpolación {{= }} produce salida sin escapar - cualquier dato interpolado en la plantilla se trata como marcado, no como texto. Si el mismo campo name se renderizara mediante element.textContent (que trata la entrada como texto plano) o mediante la sintaxis de salida codificada {{! }} de doT.js, no sería posible ningún XSS independientemente del contenido de la entrada.

La superficie de ataque existe precisamente porque:

  1. Un editor gráfico requiere renderizado HTML enriquecido (bloques estilizados, iconos, diseños)
  2. El motor de plantillas elegido (doT.js) por defecto produce salida sin escapar ({{= }}) por rendimiento
  3. Los metadatos proporcionados por el usuario (nombres de triggers) fluyen hacia estas plantillas sin saneamiento
  4. El resultado es que cualquier cadena almacenada en el campo name se interpreta como HTML por el navegador

Este es un patrón de vulnerabilidad común en aplicaciones web que utilizan motores de plantillas del lado del cliente para construir interfaces visuales interactivas: la necesidad de renderizado enriquecido crea una relación de confianza implícita entre la plantilla y sus fuentes de datos, y cualquier entrada de usuario sin saneamiento que llegue a la plantilla se convierte en código ejecutable.

Por qué `` y no <script>

Una etiqueta <script> sin procesar inyectada mediante interpolación de plantillas normalmente no se ejecutará en este contexto. Los navegadores no ejecutan elementos <script> que se insertan en el DOM después del análisis inicial de la página (mediante innerHTML o equivalente). Los atributos de manejadores de eventos como onerror, onload o onmouseover en elementos HTML evitan esta restricción porque ejecutan JavaScript en línea cuando el navegador procesa los atributos del elemento, independientemente de cómo se insertó el elemento.

Descargar herramienta