
Python-скрипт для проверки концепции, демонстрирующий уязвимость XSS CVE-2018-25031 в Swagger UI с использованием Selenium для автоматического обнаружения на нескольких конечных точках.
Этот репозиторий содержит скрипт на Python, демонстрирующий доказательство концепции (PoC) уязвимости межсайтового скриптинга (XSS) в Swagger UI с использованием библиотеки Selenium. Цель этой PoC — выявление сайтов, подверженных этой уязвимости, путём эксплуатации Swagger UI с вредоносной нагрузкой.
Swagger UI — это широко используемый инструмент для просмотра и взаимодействия с API через удобный пользовательский интерфейс. Однако в версии 2.9.2 была обнаружена уязвимость межсайтового скриптинга (XSS), которая могла позволить атакующему внедрять вредоносный JavaScript-код в загружаемые страницы Swagger UI.
XSS возникает, когда приложение недостаточно корректно проверяет данные, введённые пользователем, перед их отображением на странице. В данном случае злоумышленник может воспользоваться уязвимостью, внедряя вредоносный JavaScript-код в поля ввода Swagger UI, который будет выполняться в контексте браузера других пользователей, открывающих ту же скомпрометированную страницу.

Примечание: Изображение выше иллюстрирует пример того, как злоумышленник может внедрить XSS-нагрузку в Swagger UI, используя уязвимость в затронутых версиях.
Наиболее эффективный способ устранить эту уязвимость — убедиться, что Swagger UI обновлён до версии, которая не подвержена проблеме. Проверяйте последние версии Swagger UI и всегда поддерживайте его в актуальном состоянии.
Разработчикам, которые хотят использовать или настраивать Swagger UI, крайне важно выполнять надлежащую проверку входных данных перед их отображением в интерфейсе. Избегание прямой отрисовки HTML или JavaScript, введённого пользователями, является рекомендуемой практикой для предотвращения XSS-уязвимостей.
Вот упрощённый пример того, как уязвимость может быть использована через Swagger UI:
Этот раздел предназначен исключительно для образовательных и информационных целей. Не поощряйте и не участвуйте в вредоносных или незаконных действиях. Всегда следуйте практике ответственного раскрытия информации при сообщении об уязвимостях.
Убедитесь, что у вас установлены следующие предварительные требования перед запуском скрипта:
pip install selenium
Клонируйте или загрузите этот репозиторий на свою машину.
Отредактируйте файл sites_para_testar.txt и вставьте URL-адреса сайтов, которые вы хотите протестировать, по одному в строке.
Откройте терминал в папке репозитория и выполните скрипт следующей командой:
python main.py
Скрипт переберёт сайты, перечисленные в файле sites_para_testar.txt, откроет их URL-адреса Swagger UI и проверит, обнаружено ли XSS-предупреждение. Результаты будут записаны в три файла: valido.txt для потенциально уязвимых URL-адресов, talvezvalido.txt для URL-адресов, которые могут быть уязвимы, и naovalido.txt для не уязвимых URL-адресов.
Скрипт использует библиотеку Selenium для автоматизации взаимодействия с браузером Chrome. Он загружает URL-адреса Swagger UI, указанные в файле sites_para_testar.txt, добавляет вредоносную нагрузку в параметр configUrl и проверяет, срабатывает ли XSS-предупреждение.
Скрипт выполняет следующие шаги:
Импортирует необходимые библиотеки Selenium и другие зависимости.
Настраивает параметры ChromeDriver для игнорирования ошибок SSL и сертификатов.
Инициализирует драйвер Chrome.
Читает сайты для тестирования из файла sites_para_testar.txt и выполняет по ним итерацию.
Открывает каждый URL-адрес Swagger UI с добавленной вредоносной нагрузкой.
Пытается проверить, срабатывает ли XSS-предупреждение.
На основании результата проверки записывает URL-адреса в файлы valido.txt, talvezvalido.txt или naovalido.txt.
Завершает работу драйвера Chrome.
Этот скрипт предоставляется исключительно в образовательных целях и для повышения осведомлённости о кибербезопасности. Его не следует использовать в вредоносных или незаконных целях. Автор не несёт ответственности за любое неправомерное использование этого скрипта или за любой ущерб, возникший в результате его использования.
Если вы нашли способ улучшить этот скрипт или у вас есть предложения, не стесняйтесь создавать pull request.
Этот проект лицензирован под лицензией MIT.