Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-78071 — XSS stocké via le titre de localisation dans DPCalendar Free | Kitploit
Outils/GitHubGitHub/toanln-cov/cve-2026-78071
Analyse des VulnérabilitésAnalyse de CodeExploitationExploitation d'Applications WebSécurité Web
GitHubtoanln-cov/cve-2026-78071

CVE-2026-78071

XSS stocké via le titre de localisation dans DPCalendar Free

Voir le dépôt
21il y a 1 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

XSS stocké via le titre d'un lieu dans DPCalendar Free

DPCalendar Free ≤ 10.11.2 — Un utilisateur avec le rôle Auteur contourne la revue de contenu pour injecter un XSS persistant via le titre d'un lieu, déclenché au survol par tout visiteur

CVE CVSS CWE-79 Affected Researcher


RÉSUMÉ

Le champ $location->title est rendu sans htmlspecialchars() dans default_locations.php. Le InputFilter::clean() côté serveur de Joomla supprime < et > des champs de type chaîne mais autorise ", permettant à un utilisateur avec le rôle Auteur de sortir du contexte d'attribut HTML. Lorsqu'un visiteur survole la section d'informations du lieu d'une page d'événement, le gestionnaire onmouseover injecté exécute du JavaScript arbitraire dans sa session de navigation.

Un second défaut de conception amplifie l'impact : EventController::allowEdit() vérifie uniquement created_by == current_user — il ne vérifie pas l'état de publication de l'événement. Un Auteur peut créer un événement bénin, le faire publier par un administrateur, puis armer silencieusement le lieu associé en modifiant son titre après publication, contournant entièrement la revue de contenu. La charge utile XSS est insérée après la modération ; les administrateurs ne la voient jamais durant leur cycle de revue.


VERSIONS AFFECTÉES

COMPOSANTVULNÉRABLETESTÉ SURCORRIGÉ
DPCalendar Free≤ 10.11.2Joomla 6.1.2 + DPCalendar Free 10.11.2 (PHP 8.3 / Apache)10.12.0

DÉTAILS DE LA VULNÉRABILITÉ

Type : Cross-Site Scripting stocké / Encodage de sortie inapproprié (CWE-79) Authentification requise : rôle Auteur — utilisateur frontal (groupe Joomla 4, minimum requis pour créer des événements) Fichier : site/tmpl/event/default_locations.php

Cause racine

$location->title est affiché directement — sans htmlspecialchars() — dans deux contextes de sortie dans default_locations.php. Le contexte d'attribut est la source exploitable via l'interface web, car l'InputFilter de Joomla bloque <> mais laisse passer " sans modification.

DEFAULT_LOCATIONS.PHP — SOURCES DE SORTIE VULNÉRABLES

// Source 1 — contenu texte (injection HTML ; <> supprimé par InputFilter via l'interface web)
<span class="dp-location__title"><?php echo $location->title; ?></span>

// Source 2 — attribut HTML (injection d'attribut ; " passe à travers InputFilter)
<div class="dp-location__details"
     data-title="<?php echo $location->title; ?>"

Une valeur de titre telle que New Location" onmouseover="alert(document.domain) est stockée intacte par le serveur. À la sortie, la source 2 est rendue comme suit :

<div class="dp-location__details"
     data-title="New Location" onmouseover="alert(document.domain)"

L'attribut onmouseover devient un gestionnaire d'événements actif dans le DOM rendu.

Vérification manquante de l'état de publication

EventController::allowEdit() accorde l'accès en modification à tout Auteur pour ses propres événements, quel que soit l'état de publication. Un attaquant établit la confiance en soumettant un événement normal pour revue par l'administrateur, puis — après publication par l'administrateur — modifie silencieusement le lieu associé pour injecter la charge utile XSS :

SITE/SRC/CONTROLLER/EVENTCONTROLLER.PHP — ALLOWEDIT() SANS VÉRIFICATION D'ÉTAT

protected function allowEdit($data = [], $key = 'id')
{
    // ...
    return $calendar instanceof CalendarInterface &&
           ($calendar->canEdit() ||
            ($calendar->canEditOwn() &&
             $event->created_by == $this->getCurrentUser()->id));
    // ↑ Aucune vérification de $event->state — les événements publiés restent modifiables par l'Auteur
}

PREUVE DE CONCEPT

1. Se connecter avec un utilisateur au rôle Auteur

Accéder au formulaire de connexion frontal et se connecter avec un compte Auteur (groupe Joomla 4 — minimum requis pour créer des événements et des lieux).

Étape 1 — Connexion en tant qu'Auteur

2. Créer un événement normal avec un lieu légitime

Accéder à /index.php?option=com_dpcalendar&view=form. Créer un événement avec un titre propre et associer un lieu existant (par exemple « Greater London »). Cela établit la légitimité de l'Auteur avant l'introduction de la charge utile.

Étape 2 — Formulaire de création d'événement bénin

Étape 3 — Associer un lieu légitime avant l'enregistrement

3. Attendre qu'un administrateur publie l'événement

L'événement est soumis pour revue. Un administrateur se connecte et le publie depuis le backend DPCalendar. L'événement est désormais en ligne et visible par tous les visiteurs du site.

Étape 4 — L'administrateur publie l'événement

4. Revenir à l'événement publié et ouvrir le lieu pour modification

En tant qu'Auteur, accéder à la page de l'événement publié. Le bouton Modifier l'événement reste visible — allowEdit() ne vérifie pas l'état de publication. Cliquer sur Modifier l'événement, aller dans l'onglet Lieu, puis cliquer sur l'icône crayon pour ouvrir locationform.

Étape 5 — Icône de modification toujours disponible après publication par l'administrateur

5. Injecter la charge utile XSS dans le champ du titre du lieu

Remplacer le nom du lieu par la charge utile. L'InputFilter de Joomla laisse passer " — la charge utile est enregistrée intacte et brise le contexte d'attribut HTML à la sortie :

CHARGE UTILE — CHAMP TITRE (LOCATIONFORM)

New Location" onmouseover="alert(document.domain)

Étape 6 — Injection de la charge utile XSS dans le champ du titre du lieu

Cliquer sur Enregistrer.

6. Tout visiteur de la page d'événement déclenche le XSS au survol

Lorsque tout utilisateur — authentifié ou anonyme — visite la page de détail de l'événement et déplace son curseur sur la section Informations sur le lieu, le gestionnaire onmouseover injecté se déclenche immédiatement. Aucune authentification, aucun clic et aucune autre interaction ne sont nécessaires au-delà de la visite de la page.

Étape 7 — Le XSS se déclenche au survol

Télécharger l’outil