
Questa vulnerabilità mostra un difetto XSS in un plugin popup di WordPress, permettendo agli aggressori di iniettare JavaScript malevolo attraverso un XSS memorizzato.
Questa vulnerabilità consente a un attaccante di sfruttare una falla di Cross-Site Scripting (XSS) nel plugin WordPress Popup Builder. Il plugin non impedisce ai visitatori normali di modificare i popup esistenti e, inviando una richiesta appositamente costruita al server, l'attaccante può iniettare script maliziosi nel popup, che verranno eseguiti quando gli utenti interagiscono con il popup.
Per questo POC, la vulnerabilità si attiva manipolando il comportamento di apertura del popup, dove un semplice script di alert verrà iniettato per essere eseguito all'apertura del popup. Questo tipo di attacco può portare a una serie di problemi, tra cui accesso non autorizzato a informazioni sensibili e ulteriore sfruttamento del sito web colpito, compromettendo potenzialmente i dati degli utenti o l'intero sito.
Per questo POC possiamo usare una macchina Windows 10 e scaricare XAMPP: https://www.apachefriends.org/download.html
Dopo l'installazione, assicurati di attivare i moduli Apache e MySQL:

WordPress, come la maggior parte dei sistemi di gestione dei contenuti, richiede un database per memorizzare tutti i suoi dati essenziali. Il database SQL che creeremo funge da archivio centrale per tutte queste informazioni.
La versione vulnerabile del plugin Popup Builder può essere scaricata dal loro sito principale: https://wordpress.org/plugins/popup-builder/advanced/
Scegli una versione precedente alla correzione nella 4.2.3:

Successivamente, vai alla pagina admin di WordPress - http://localhost/wordpress/wp-login.php
Plugin -> Aggiungi nuovo plugin -> Carica plugin -> Scegli il file .ZIP scaricato e installa
Nella pagina admin di WordPress, possiamo creare una semplice pagina frontale andando su Pagine -> Aggiungi nuova pagina -> Scegli un modello.
Per il Popup, vai su Popup Builder -> Aggiungi nuovo -> Scegli il tipo e personalizza.
Per questo POC, ho selezionato un popup di iscrizione, poiché è uno dei popup più comunemente visti sui siti web oggi.

Nella scheda Regole di visualizzazione, puoi associare il popup alla tua pagina frontale:

Ora quando entriamo nella nostra pagina frontale usando http://localhost/wordpress/
possiamo vedere il nostro popup attivarsi.
Per eseguire l'exploit, dobbiamo prima identificare l'ID del Popup.
Questo può essere fatto navigando sul sito, attivando il popup e aprendo la scheda Rete negli strumenti di sviluppo.
Cerca la richiesta admin-ajax.php, un componente core di WordPress utilizzato per gestire le richieste AJAX.
Popup Builder utilizza questo per gestire funzioni come salvare, aggiornare, visualizzare in anteprima e controllare i popup all'interno di WordPress.
Sotto la scheda Payload, possiamo trovare l'ID del popup:

Dopo aver trovato l'ID del Popup, possiamo usare il seguente script per attivare l'exploit:
import requests
# Definisci l'URL di destinazione per il sito vulnerabile
url = "http://localhost/wordpress/"
headers = {
"Content-Type": "application/x-www-form-urlencoded"
}
data = {
"sgpb-is-preview": "1",
"post_ID": "22", #usa l'ID del Popup che abbiamo trovato
"sgpb-type": "html",
"sgpb-WillOpen": "alert('Stored XSS Executed Successfully');" #il codice JS personalizzato va qui
}
# Invia la richiesta POST e stampa i risultati
response = requests.post(url, data=data)
print(response.text)
Poiché possiamo modificare il popup, possiamo anche controllare i tempi di attivazione del nostro JS personalizzato. Se andiamo nella pagina admin di WordPress, nelle impostazioni del popup possiamo vedere un'opzione "Custom JS or CSS", che controllerà i tempi del codice personalizzato:

Possiamo quindi incorporarlo nel nostro script in base all'uso desiderato.
Dopo aver attivato lo script, possiamo vedere nella pagina admin di WordPress che una nuova riga è stata aggiunta alla sezione JS personalizzato del nostro popup:

Ora, entrando nel sito come utente normale, possiamo vedere il seguente messaggio apparire:

Possiamo anche vedere che il nostro messaggio è stato salvato all'interno del database SQL (nella tabella wp_postmeta per impostazione predefinita), confermando che si tratta di un XSS memorizzato:

Questa vulnerabilità XSS memorizzata nel plugin Popup Builder consente all'attaccante di incorporare JavaScript dannoso che può essere eseguito ogni volta che un utente interagisce con il popup infetto. Ecco alcuni modi per sfruttarla maliziosamente: