
Script de prueba de concepto basado en Python que demuestra la vulnerabilidad XSS CVE-2018-25031 en Swagger UI utilizando Selenium para la detección automatizada en múltiples endpoints.
Este repositorio contiene un script en Python que demuestra una prueba de concepto (POC) de una vulnerabilidad de Cross-Site Scripting (XSS) en Swagger UI, usando la biblioteca Selenium. El objetivo de esta POC es identificar sitios que son susceptibles a esta vulnerabilidad mediante la explotación de Swagger UI con una carga maliciosa.
Swagger UI es una herramienta ampliamente utilizada para visualizar e interactuar con APIs a través de una interfaz de usuario amigable. Sin embargo, en la versión 2.9.2, se identificó una vulnerabilidad de Cross-Site Scripting (XSS) que podría permitir que un atacante inyectara código JavaScript malicioso en páginas Swagger UI cargadas.
El XSS ocurre cuando una aplicación no valida adecuadamente los datos insertados por el usuario antes de mostrarlos en la página. En este caso, un atacante puede explotar la vulnerabilidad insertando código JavaScript malicioso en campos de entrada de Swagger UI, que se ejecutará en el contexto del navegador de otros usuarios que acceden a la misma página comprometida.

Nota: La imagen anterior ilustra un ejemplo de cómo un atacante puede insertar un payload de XSS en Swagger UI, aprovechando una falla de seguridad en las versiones afectadas.
La manera más eficaz de mitigar esta vulnerabilidad es garantizar que Swagger UI esté actualizado a una versión que no esté afectada. Verifique las versiones más recientes de Swagger UI y manténgalo siempre actualizado.
Para desarrolladores que deseen usar o personalizar Swagger UI, es fundamental realizar la validación adecuada de los datos de entrada antes de mostrarlos en la interfaz. Evitar la renderización directa de HTML o JavaScript insertado por los usuarios es una práctica recomendada para evitar vulnerabilidades de XSS.
Aquí hay un ejemplo simplificado de cómo se puede explotar la vulnerabilidad usando Swagger UI:
Esta sección está destinada únicamente a fines educativos e informativos. No incentive ni participe en actividades maliciosas o ilegales. Siempre siga las prácticas de divulgación responsable al reportar vulnerabilidades.
Asegúrese de tener los siguientes requisitos previos instalados antes de ejecutar el script:
pip install selenium
Clone o descargue este repositorio en su máquina.
Edite el archivo sites_para_testar.txt e inserte las URLs de los sitios que desea probar, una por línea.
Abra una terminal en la carpeta del repositorio y ejecute el script usando el siguiente comando:
python main.py
El script recorrerá los sitios listados en el archivo sites_para_testar.txt, accederá a sus URLs de Swagger UI y verificará si se detecta una alerta de XSS. Los resultados se registrarán en tres archivos: valido.txt para URLs potencialmente vulnerables, talvezvalido.txt para URLs que pueden ser vulnerables y naovalido.txt para URLs no vulnerables.
El script utiliza la biblioteca Selenium para automatizar la interacción con el navegador Chrome. Carga las URLs de Swagger UI configuradas en el archivo sites_para_testar.txt, añade una carga maliciosa al parámetro configUrl y verifica si se activa una alerta de XSS.
El script hace uso de los siguientes pasos:
Importa las bibliotecas necesarias de Selenium y otras dependencias.
Configura las opciones de ChromeDriver para ignorar errores de SSL y certificado.
Inicializa el driver de Chrome.
Lee los sitios a probar del archivo sites_para_testar.txt e itera sobre ellos.
Abre cada URL de Swagger UI con la carga maliciosa añadida.
Intenta verificar si se activa una alerta de XSS.
Según el resultado de la verificación, registra las URLs en los archivos valido.txt, talvezvalido.txt o naovalido.txt.
Cierra el driver de Chrome.
Este script se proporciona únicamente con fines educativos y de concienciación sobre ciberseguridad. No debe usarse con fines maliciosos o ilegales. El autor no se hace responsable por cualquier uso indebido de este script ni por los daños derivados de su uso.
Si encuentra alguna manera de mejorar este script o tiene sugerencias, no dude en crear una solicitud de pull.
Este proyecto está licenciado bajo la Licencia MIT.