
Esta vulnerabilidad muestra una falla XSS en un plugin de ventanas emergentes de WordPress, permitiendo a los atacantes inyectar JavaScript malicioso a través de un XSS almacenado.
Esta vulnerabilidad permite a un atacante explotar una falla de Cross-Site Scripting (XSS) en el plugin Popup Builder de WordPress. El plugin no impide que los visitantes normales modifiquen las ventanas emergentes existentes y, al enviar una solicitud especialmente diseñada al servidor, el atacante puede inyectar scripts maliciosos en la ventana emergente, que se ejecutarán cuando los usuarios interactúen con ella.
Para esta POC, la vulnerabilidad se activará manipulando el comportamiento de apertura del popup, donde se inyectará un simple script de alerta para que se ejecute cuando se abra el popup. Este tipo de ataque puede provocar una serie de problemas, incluido el acceso no autorizado a información sensible y una mayor explotación del sitio web afectado, comprometiendo potencialmente los datos del usuario o todo el sitio.
Para esta POC, podemos usar una máquina con Windows 10 y descargar XAMPP: https://www.apachefriends.org/download.html
Después de la instalación, asegúrate de activar los módulos Apache y MySQL:

WordPress, como la mayoría de los sistemas de gestión de contenido, requiere una base de datos para almacenar todos sus datos esenciales. La base de datos SQL que crearemos actúa como almacenamiento central para toda esta información.
La versión vulnerable del plugin Popup Builder se puede descargar desde su sitio principal: https://wordpress.org/plugins/popup-builder/advanced/
Elige una versión anterior a la corrección en 4.2.3:

Luego, ve a tu página de administración de WordPress - http://localhost/wordpress/wp-login.php
Plugins -> Añadir nuevo plugin -> Subir plugin -> Elegir el archivo .ZIP descargado e instalar
En la página de administración de WordPress, podemos crear una página principal simple yendo a Páginas -> Añadir nueva página -> Elegir un patrón.
Para el popup, ve a Popup Builder -> Añadir nuevo -> Elegir tipo y personalizar.
Para esta POC, seleccioné un popup de suscripción, ya que es uno de los más comunes en los sitios web hoy en día.

En la pestaña Reglas de visualización, puedes asociar el popup a tu página principal:

Ahora, cuando accedemos a nuestra página principal usando http://localhost/wordpress/
podemos ver que nuestro popup se activa.
Para ejecutar el exploit, primero necesitamos identificar el ID del Popup.
Esto se puede hacer navegando al sitio, activando el popup y abriendo la pestaña Red en las herramientas de desarrollador.
Busca la solicitud admin-ajax.php, un componente central de WordPress utilizado para manejar solicitudes AJAX.
Popup Builder utiliza esto para gestionar funciones como guardar, actualizar, previsualizar y controlar popups dentro de WordPress.
En la pestaña Payload, podemos encontrar el ID del popup:

Después de encontrar el ID del Popup, podemos usar el siguiente script para desencadenar el 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)
Dado que podemos editar el popup, también podemos controlar el momento de activación de nuestro JS personalizado. Si vamos a la página de administración de WordPress, en la configuración del popup podemos ver una opción "Custom JS or CSS", que controlará el momento del código personalizado:

Luego podemos incorporar esto en nuestro script según el uso deseado.
Después de ejecutar el script, podemos ver en la página de administración de WordPress que se ha añadido una nueva línea a la sección de JS personalizado de nuestro popup:

Ahora, al ingresar al sitio como un usuario normal, podemos ver el siguiente mensaje emergente:

También podemos ver que nuestro mensaje se guardó dentro de la base de datos SQL (bajo la tabla wp_postmeta por defecto), lo que confirma que se trata de un XSS almacenado:

Esta vulnerabilidad de XSS almacenado en el plugin Popup Builder permite al atacante incrustar JavaScript malicioso que puede ejecutarse cada vez que un usuario interactúa con el popup infectado. Las siguientes son formas de explotarlo maliciosamente: