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-66917 — IDOR + XSS stocké via une autorisation au niveau objet cassée dans JoomGallery | Kitploit
Outils/GitHubGitHub/toanln-cov/cve-2026-66917
Authentification et AutorisationAnalyse des VulnérabilitésAnalyse de CodeExploitationExploitation d'Applications WebSécurité Web
GitHubtoanln-cov/cve-2026-66917

CVE-2026-66917

IDOR + XSS stocké via une autorisation au niveau objet cassée dans JoomGallery

Voir le dépôt
il y a 1 jourPas 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

IDOR + XSS stocké via une autorisation au niveau de l'objet cassée dans JoomGallery

JoomGallery ≤ 4.3.0 — Un utilisateur au rôle Éditeur détourne n'importe quelle image de la galerie et stocke une charge utile XSS, permettant la prise de contrôle de la session administrateur

CVE CVSS v4.0 CWE-639 CWE-79 Affected Researcher


RÉSUMÉ

UserimageController::save() dans JoomGallery vérifie checkACL('edit', ...) au lieu de checkACL('edit.own', ...). Un utilisateur au rôle Éditeur peut envoyer une requête POST vers task=userimage.save&id=N pour n'importe quelle image, indépendamment de la propriété (IDOR — CWE-639). Étant donné que le rôle Éditeur possède core.edit globalement, le contrôle d'autorisation réussit pour chaque ID d'image du site, y compris les images appartenant aux administrateurs.

Combiné à un appel $this->escape() manquant dans le template frontal de l'image, un Éditeur peut stocker une charge utile XSS dans n'importe quel titre d'image — y compris les images appartenant aux administrateurs — provoquant l'exécution de JavaScript dans le navigateur de chaque visiteur. Cela permet le détournement complet de la session administrateur et la compromission totale du site.


VERSIONS AFFECTÉES

COMPOSANTVULNÉRABLETESTÉ SURCORRIGÉ
JoomGallery (com_joomgallery)4.0.0 – 4.3.0Joomla 5.4.7 + JoomGallery 4.3.0-stable (PHP 8.2 / Apache)4.4.0

DÉTAILS DE LA VULNÉRABILITÉ

Type : Autorisation au niveau de l'objet cassée / IDOR (CWE-639) chaînée avec du Cross-Site Scripting stocké (CWE-79) Authentification requise : Compte Éditeur à faibles privilèges

Cause racine 1 — IDOR (CWE-639)

Fichier : components/com_joomgallery/src/Controller/UserimageController.php

L'action save() effectue un contrôle ACL en utilisant la permission edit au lieu de edit.own. La permission edit est accordée globalement à tous les utilisateurs du rôle Éditeur, donc le contrôle réussit pour n'importe quel ID d'image, quel que soit son créateur.

USERIMAGECONTROLLER.PHP — CODE VULNÉRABLE (LIGNE 145)

root@kitploit:~
// Vulnérable
if (!$this->checkACL('edit', 'image', $recordId, $parent_id, true)) { ... }

Parce que core.edit est détenu globalement par le groupe Éditeur, la condition est évaluée à false pour chaque ID d'image, accordant un accès en écriture sans restriction. Lors d'une sauvegarde réussie, le modèle met également à jour created_by avec l'ID utilisateur de l'attaquant, transférant silencieusement la propriété de l'image à l'attaquant.

Cause racine 2 — XSS stocké (CWE-79)

Fichier : components/com_joomgallery/tmpl/image/default.php

Le template frontal de l'image affiche $this->item->title sans l'encoder en HTML dans le contexte de l'attribut alt. Le filtre STRING de JInput de Joomla ne supprime pas les guillemets doubles, donc une charge utile contenant " sort de l'attribut et injecte des gestionnaires d'événements arbitraires.

DEFAULT.PHP — CODE VULNÉRABLE (LIGNES 64, 78)

root@kitploit:~
// Vulnérable
item->title; ?>" ...>

La charge utile abc" onmouseover="alert(document.domain);" x=" est stockée dans jos_joomgallery.title et injectée brute dans l'attribut HTML à chaque rendu de page. Aucune désinfection n'est effectuée au niveau du stockage ou de l'affichage.


PREUVE DE CONCEPT

Vue d'ensemble de la chaîne d'attaque

  1. L'administrateur crée une image de galerie (ID=3). Propriétaire = Administrateur. Publiée et approuvée.
  2. L'attaquant se connecte en tant qu'Éditeur. Extrait le cookie de session et le jeton CSRF de la page de connexion.
  3. L'attaquant récupère un jeton CSRF frais depuis le composant JoomGallery.
  4. IDOR : L'Éditeur envoie une requête POST task=userimage.save&id=3 avec la charge utile XSS dans jform[title]. Le contrôle ACL réussit (core.edit, pas edit.own). Le serveur renvoie HTTP 303 — pas 403.
  5. Le titre est mis à jour avec la charge utile non échappée. created_by est transféré à l'ID utilisateur de l'attaquant.
  6. La charge utile XSS est stockée sans échappement dans jos_joomgallery.title.
  7. Tout visiteur (ou administrateur) consulte la galerie côté front. Le template rend alt="abc" onmouseover="alert(document.domain);". Le XSS se déclenche. La session administrateur est capturée → compromission totale du site.

1. L'administrateur crée une image de galerie — Propriétaire : Administrateur, ID = 3

L'administrateur crée admin_image via le backend JoomGallery (Joomla 5.4.7). L'image est publiée, approuvée et appartient à Administrateur

Étape 1


2. L'Éditeur extrait le jeton CSRF de la page de connexion

GET /index.php/component/users/login — le JSON de réponse contient "csrf.token":"a68c2b3a...". Le jeton est capturé pour la requête POST de connexion suivante.

Étape 2


3. L'Éditeur se connecte — HTTP 303, joomla_user_state=logged_in

POST /index.php/component/users/login avec le jeton CSRF et les identifiants de l'Éditeur. Réponse : HTTP 303 et Set-Cookie: joomla_user_state=logged_in. Le cookie de session est capturé.

Étape 3


4. L'Éditeur extrait un jeton CSRF frais de JoomGallery

GET /index.php?option=com_joomgallery avec le cookie de session. La réponse contient un nouveau "csrf.token":"2d96934b..." à utiliser dans la requête de sauvegarde.

Étape 4


5. Injection IDOR + XSS — Le serveur accepte avec HTTP 303

L'Éditeur envoie une requête POST vers option=com_joomgallery&task=userimage.save&id=3 avec jform[title] défini sur :

root@kitploit:~
abc" onmouseover="alert(document.domain);" x="

Le serveur renvoie HTTP 303 (pas 403), confirmant l'IDOR. L'en-tête Location montre la charge utile XSS dans l'URL de redirection, confirmant que le titre a été accepté et sauvegardé.

Étape 5


6. Transfert de propriété — Le propriétaire devient l'utilisateur Éditeur

Le backend JoomGallery montre que l'image ID=3 a désormais pour propriétaire : Editor User. Le champ created_by a été silencieusement mis à jour dans la base de données lors de la sauvegarde non autorisée.

Étape 6


7. La base de données confirme que la charge utile est stockée sans échappement

La requête SQL sur jos_joomgallery confirme que la charge utile XSS est stockée — " est stocké comme un guillemet double brut, et non comme ". Aucune désinfection n'a été effectuée au niveau du stockage.

Étape 7


8. Le XSS se déclenche sur le front de la galerie

Tout utilisateur visitant /index.php/component/joomgallery/gallery déclenche la charge utile. La boîte de dialogue alert() du navigateur confirme l'exécution de JavaScript dans l'origine de la victime (document.domain).

Étape 8


IMPACT

  1. Modification d'image non autorisée (IDOR) : Un utilisateur au rôle Éditeur peut modifier n'importe quelle image de la galerie du site, y compris les images appartenant aux administrateurs, sans validation de propriété.
  2. Transfert de propriété silencieux : Chaque sauvegarde non autorisée réaffecte silencieusement created_by à l'attaquant, modifiant définitivement la piste d'audit.
  3. XSS stocké — Exécution persistante : La charge utile JavaScript injectée s'exécute dans le navigateur de chaque visiteur à chaque chargement de page de la galerie, affectant aussi bien les visiteurs non authentifiés que les administrateurs.
  4. Détournement de session administrateur → compromission totale du site : Un script malveillant dans l'attribut alt peut exfiltrer le cookie de session de l'administrateur, donnant à l'attaquant un accès complet au backend et le contrôle de toute l'installation Joomla.
  5. Changement de portée : Le XSS s'exécute dans l'origine du navigateur de la victime (CVSS S:C), franchissant la frontière de confiance entre la session à faibles privilèges de l'attaquant et la session à hauts privilèges de la victime.

RÉFÉRENCES

  • CVE : https://www.cve.org/CVERecord?id=CVE-2026-66917
  • NVD : https://nvd.nist.gov/vuln/detail/CVE-2026-66917
  • Avis GitHub : https://github.com/advisories/GHSA-8vxv-gf52-gm5h
  • Dépôt du fournisseur : https://github.com/JoomGalleryfriends/JoomGallery
  • Note de version du fournisseur : https://www.joomgalleryfriends.net/en/blog/joomgallery-4-en/joomgallery-4-4-0.html
Télécharger l’outil