
Cette vulnérabilité présente une faille XSS dans un plugin de popup WordPress, permettant aux attaquants d'injecter du JavaScript malveillant via un XSS stocké.
Cette vulnérabilité permet à un attaquant d'exploiter une faille de type Cross-Site Scripting (XSS) dans le plugin WordPress Popup Builder. Le plugin ne parvient pas à empêcher les visiteurs ordinaires de modifier des popups existants et, en envoyant une requête spécialement conçue au serveur, l'attaquant peut injecter des scripts malveillants dans le popup, qui s'exécuteront lorsque les utilisateurs interagiront avec celui-ci.
Pour cette POC, la vulnérabilité se déclenchera en manipulant le comportement d'ouverture du popup, où un simple script d'alerte sera injecté pour s'exécuter à l'ouverture du popup. Ce type d'attaque peut entraîner divers problèmes, notamment un accès non autorisé à des informations sensibles et une exploitation ultérieure du site Web affecté, compromettant potentiellement les données des utilisateurs ou l'ensemble du site.
Pour cette POC, nous pouvons utiliser une machine Windows 10 et télécharger XAMPP : https://www.apachefriends.org/download.html
Après installation, assurez-vous d'activer les modules Apache et MySQL :

WordPress, comme la plupart des systèmes de gestion de contenu, nécessite une base de données pour stocker toutes ses données essentielles. La base de données SQL que nous allons créer sert de stockage central pour toutes ces informations.
La version vulnérable du plugin Popup Builder peut être téléchargée depuis leur site principal : https://wordpress.org/plugins/popup-builder/advanced/
Choisissez une version antérieure à la correction dans la 4.2.3 :

Ensuite, allez sur votre page d'administration WordPress - http://localhost/wordpress/wp-login.php
Extensions -> Ajouter une extension -> Téléverser une extension -> Choisissez le fichier .ZIP téléchargé et installez-le.
Dans la page d'administration WordPress, nous pouvons créer une simple page d'accueil en allant dans Pages -> Ajouter une page -> Choisir un modèle.
Pour le popup, allez dans Popup Builder -> Ajouter nouveau -> Choisissez le type et personnalisez-le.
Pour cette POC, j'ai sélectionné un popup d'abonnement, car c'est l'un des popups les plus courants sur les sites Web aujourd'hui.

Dans l'onglet Règles d'affichage, vous pouvez attacher le popup à votre page d'accueil :

Maintenant, lorsque nous accédons à notre page d'accueil via http://localhost/wordpress/
nous pouvons voir notre popup se déclencher.
Pour exécuter l'exploit, nous devons d'abord identifier l'ID du popup.
Cela peut être fait en naviguant sur le site, en déclenchant le popup et en ouvrant l'onglet Réseau dans les outils de développement.
Recherchez la requête admin-ajax.php, un composant central de WordPress utilisé pour gérer les requêtes AJAX.
Popup Builder utilise cela pour gérer des fonctions comme la sauvegarde, la mise à jour, la prévisualisation et le contrôle des popups dans WordPress.
Sous l'onglet Payload, nous pouvons trouver l'ID du popup :

Après avoir trouvé l'ID du popup, nous pouvons utiliser le script suivant pour déclencher l'exploit :
import requests
# Define the target URL for the vulnerable site
url = "http://localhost/wordpress/"
headers = {
"Content-Type": "application/x-www-form-urlencoded"
}
data = {
"sgpb-is-preview": "1",
"post_ID": "22", #use the Popup ID we found
"sgpb-type": "html",
"sgpb-WillOpen": "alert('Stored XSS Executed Successfully');" #custom JS code goes here
}
# Send the POST request and output the results
response = requests.post(url, data=data)
print(response.text)
Puisque nous pouvons modifier le popup, nous pouvons également contrôler le moment du déclenchement de notre JS personnalisé. Si nous allons sur la page d'administration WordPress, dans les paramètres du popup, nous pouvons voir une option "JS ou CSS personnalisé", cela contrôlera le moment d'exécution du code personnalisé :

Nous pouvons ensuite intégrer cela dans notre script selon l'utilisation souhaitée.
Après avoir déclenché le script, nous pouvons voir dans la page d'administration WordPress qu'une nouvelle ligne a été ajoutée à la section JS personnalisé de notre popup :

Maintenant, en accédant au site en tant qu'utilisateur normal, nous pouvons voir le message suivant s'afficher :

Nous pouvons également voir que notre message a été sauvegardé dans la base de données SQL (dans la table wp_postmeta par défaut), ce qui confirme qu'il s'agit d'un XSS stocké :

Cette vulnérabilité de type XSS stocké dans le plugin Popup Builder permet à l'attaquant d'intégrer du JavaScript malveillant qui peut s'exécuter chaque fois qu'un utilisateur interagit avec le popup infecté. Voici des moyens de l'exploiter de manière malveillante :