
Script de prova de conceito baseado em Python demonstrando a vulnerabilidade CVE-2018-25031 XSS no Swagger UI usando Selenium para detecção automatizada em vários endpoints.
Este repositório contém um script em Python que demonstra uma prova de conceito (POC) de uma vulnerabilidade de Cross-Site Scripting (XSS) no Swagger UI, usando a biblioteca Selenium. O objetivo dessa POC é identificar sites que são suscetíveis a essa vulnerabilidade por meio da exploração do Swagger UI com uma carga maliciosa.
O Swagger UI é uma ferramenta amplamente utilizada para visualizar e interagir com APIs por meio de uma interface de usuário amigável. No entanto, na versão 2.9.2, foi identificada uma vulnerabilidade de Cross-Site Scripting (XSS) que poderia permitir que um atacante injetasse código JavaScript malicioso em páginas Swagger UI carregadas.
O XSS ocorre quando um aplicativo não valida adequadamente os dados inseridos pelo usuário antes de exibi-los na página. Nesse caso, um invasor pode explorar a vulnerabilidade inserindo um código JavaScript malicioso em campos de entrada do Swagger UI, que será executado no contexto do navegador de outros usuários que acessam a mesma página comprometida.

Nota: A imagem acima ilustra um exemplo de como um atacante pode inserir um payload de XSS no Swagger UI, aproveitando-se de uma falha de segurança nas versões afetadas.
A maneira mais eficaz de mitigar essa vulnerabilidade é garantir que o Swagger UI esteja atualizado para uma versão que não seja afetada. Verifique as versões mais recentes do Swagger UI e mantenha-o sempre atualizado.
Para desenvolvedores que desejam usar ou personalizar o Swagger UI, é fundamental realizar a validação adequada dos dados de entrada antes de exibi-los na interface. Evitar a renderização direta de HTML ou JavaScript inseridos pelos usuários é uma prática recomendada para evitar vulnerabilidades de XSS.
Aqui está um exemplo simplificado de como a vulnerabilidade pode ser explorada usando o Swagger UI:
Esta seção destina-se apenas a fins educacionais e informativos. Não incentive ou participe de atividades maliciosas ou ilegais. Sempre siga as práticas de divulgação responsável ao relatar vulnerabilidades.
Certifique-se de ter os seguintes pré-requisitos instalados antes de executar o script:
pip install selenium
Clone ou faça o download deste repositório em sua máquina.
Edite o arquivo sites_para_testar.txt e insira os URLs dos sites que você deseja testar, um por linha.
Abra um terminal na pasta do repositório e execute o script usando o seguinte comando:
python main.py
O script irá percorrer os sites listados no arquivo sites_para_testar.txt, acessar suas URLs de Swagger UI e verificar se há um alerta de XSS detectado. Os resultados serão registrados em três arquivos: valido.txt para URLs potencialmente vulneráveis, talvezvalido.txt para URLs que podem ser vulneráveis e naovalido.txt para URLs não vulneráveis.
O script utiliza a biblioteca Selenium para automatizar a interação com o navegador Chrome. Ele carrega as URLs do Swagger UI configuradas no arquivo sites_para_testar.txt, adiciona uma carga maliciosa ao parâmetro configUrl e verifica se um alerta de XSS é acionado.
O script faz uso das seguintes etapas:
Importa as bibliotecas necessárias do Selenium e outras dependências.
Configura as opções do ChromeDriver para ignorar erros de SSL e certificado.
Inicializa o driver do Chrome.
Lê os sites a serem testados do arquivo sites_para_testar.txt e itera sobre eles.
Abre cada URL do Swagger UI com a carga maliciosa adicionada.
Tenta verificar se um alerta de XSS é acionado.
Com base no resultado da verificação, registra as URLs nos arquivos valido.txt, talvezvalido.txt ou naovalido.txt.
Encerra o driver do Chrome.
Este script é fornecido apenas para fins educacionais e de conscientização sobre segurança cibernética. Não deve ser usado para fins maliciosos ou ilegais. O autor não se responsabiliza por qualquer uso indevido deste script ou por quaisquer danos decorrentes do seu uso.
Se você encontrar alguma maneira de melhorar este script ou tiver sugestões, sinta-se à vontade para criar uma solicitação de pull.
Este projeto está licenciado sob a Licença MIT.