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.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2019-3396 — Guía paso a paso de análisis y explotación para CVE-2019-3396, una vulnerabilidad SSTI crítica en Confluence Server & Data Center, incluyendo depuración y ejecución de payloads de RCE. | Kitploit
Herramientas/GitHubGitHub/tranphuc2005/cve-2019-3396
Análisis de VulnerabilidadesAnálisis de CódigoExplotaciónExplotación de Aplicaciones WebAprendizaje y EducaciónLabs y Práctica
GitHubtranphuc2005/cve-2019-3396

CVE-2019-3396

Guía paso a paso de análisis y explotación para CVE-2019-3396, una vulnerabilidad SSTI crítica en Confluence Server & Data Center, incluyendo depuración y ejecución de payloads de RCE.

Ver Repositorio
41hace 1 añoAún no revisado

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-2019-3396

🔎 Información principal:

  • Producto afectado: Confluence Server & Data Center

  • Versiones afectadas: de 6.0.0 a 6.15.4

  • Gravedad: Crítica (CVSS ~9.8)

  • Causa:

    • Confluence tiene el plugin Widget Connector (usado para incrustar videos, contenido externo como YouTube, Vimeo…).

    • Esta funcionalidad no controla correctamente la entrada del usuario, lo que lleva a una Inyección de Plantillas del Lado del Servidor (SSTI).

    • Un atacante puede enviar un payload malicioso → Confluence lo renderiza usando el motor de plantillas Velocity → ejecuta código en el servidor.

1. Instalación e inicio del sitio web

  • Instalar una de las versiones vulnerables, por ejemplo 6.9.0:
https://www.atlassian.com/software/confluence/downloads/binary/atlassian-confluence-6.9.0.zip
  • Seguir los pasos de configuración según la guía
https://nguyendt.hashnode.dev/confluence-cve-2019-3396
  • Después de la instalación exitosa, veremos la interfaz

1

2. Localización de la vulnerabilidad y depuración

2.1 Localización de la vulnerabilidad

  • Según el PoC, la funcionalidad vulnerable está en el módulo Widget Connector (usado para incrustar videos, contenido externo como YouTube, Vimeo…)
  • Busquemos esa funcionalidad:
  1. Seleccionar la sección Other macros

1

  1. Buscar la herramienta de resolución Widget Connector

1

  1. Introducir un enlace, completar la información solicitada y seleccionar Preview

1

2.2 Configuración para depurar

  • Como la descripción menciona Widget Connector, intentamos buscar en la carpeta fuente de Confluence

1

  • Leer el archivo .jar usando Intellij IDEA
  • Colocar un Breakpoint en los puntos donde se procesa la resolución del enlace y realizar la depuración

Proceso de depuración

  • Iniciar la depuración y colocar un breakpoint en com.atlassian.confluence.extra.widgetconnector.WidgetMacro.class
  • Aquí vemos los parámetros
  • Llama a la clase DefaultRenderManager.class

1

  • Aquí se usa el método getEmbeddedHtml()
  • Devuelve el código HTML para incrustar contenido externo (video, widget, documento…) basado en una URL que el usuario inserta en la página de Confluence
  • Desde aquí se llama al método YoutubeRenderer

1

  • Entrar en la clase YoutubeRenderer
  • En este método getEmbeddedHtml(String url, Map<String, String> params)
  • url → enlace original de YouTube ingresado por el usuario
  • params → mapa que contiene los parámetros de configuración para el renderizado (por ejemplo: ancho, alto, plantilla a usar,…).

1

  • Continúa llamando a getEmbedUrl(), setDefaultParam() y DefaultVelocityRenderService.render()
  • Nos enfocamos en setDefaultParam()

1

  • Si no hay _template → se asigna la plantilla predeterminada youtube.vm. => Se puede agregar _template manualmente al programa

  • A continuación, entramos en DefaultVelocityRenderService.render()

  1. Propósito del método

    • Recibe url + parámetros params.

    • Usa la plantilla Velocity (.vm) para renderizar el HTML incrustado (iframe, embed, …).

  2. Determinación de la plantilla

    • Si params contiene _template → se usa esa plantilla.

    • Si no → se usa la predeterminada embed.vm.

  3. Crea un contexto predeterminado con MacroUtils.defaultVelocityContext().

  • Coloca todos los parámetros de params en el contexto:

    • Si la clave es tweetHtml → se mantiene el HTML sin cambios.

    • De lo contrario → se codifica de forma segura con GeneralUtil.htmlEncode().

  • Agrega urlHtml, width, height al contexto (si están vacíos, se asignan valores predeterminados 400×300).

1

  • Llama a VelocityUtils.getRenderedTemplate()

1

  • Ahora pasamos a la clase VelocityUtils
  • En la parte superior se llama a getRenderedTemplate y getRenderedTemplateWithoutSwallowingErrors()

1

  • Luego continúa llamando a getTemplate()

1

  • Aquí templateName es el _template mencionado anteriormente.

  • Después continúa llamando a VelocityEngine.Template()

1

  • En la clase VelocityEngine se continúa llamando a RunimeInstance.getTemplate()

1

RuntimeInstance (núcleo de Velocity)
Este es el “corazón” del motor Velocity. Se encarga de:

  • Inicializar el motor (init)

  • Gestionar la configuración, macros, analizador sintáctico, directivas, manejadores de eventos…

  • Y especialmente: gestionar los recursos a través de ResourceManager

→ Esto significa que RuntimeInstance no carga los recursos por sí mismo, sino que delega en resourceManager.

  • Luego llama a CompatibleVelocityResourceManager.getResource()

1

ConfigurableResourceManager (personalizado de Confluence)
Esta es una implementación de la interfaz ResourceManager.
Es responsable de:

  • Gestionar los cargadores de recursos (cargador de archivos, cargador de classpath, cargador de URL…).

  • Gestionar la globalCache (caché de plantillas según resourceKey).

  • Realizar la carga/actualización de plantillas (archivo .vm) cuando RuntimeInstance lo solicita.

1

try {
    this.refreshResource(resource, encoding);
} catch (ResourceNotFoundException var7) {
    this.globalCache.remove(resourceKey);
    return this.getResource(resourceName, resourceType, encoding);
}
Descargar herramienta