
Dieses Repository enthält ein Python-Skript, das eine Proof-of-Concept (POC) einer Cross-Site-Scripting (XSS)-Schwachstelle im Swagger UI mithilfe der Selenium-Bibliothek demonstriert. Das Ziel dieser POC ist es, Websites zu identifizieren, die für diese Schwachstelle anfällig sind, indem das Swagger UI mit einem bösartigen Payload ausgenutzt wird.
Das Swagger UI ist ein weit verbreitetes Tool zum Anzeigen und Interagieren mit APIs über eine benutzerfreundliche Oberfläche. In Version 2.9.2 wurde jedoch eine Cross-Site-Scripting (XSS)-Schwachstelle identifiziert, die es einem Angreifer ermöglichen könnte, bösartigen JavaScript-Code in geladene Swagger-UI-Seiten einzuschleusen.
XSS tritt auf, wenn eine Anwendung die vom Benutzer eingegebenen Daten nicht ordnungsgemäß validiert, bevor sie auf der Seite angezeigt werden. In diesem Fall kann ein Angreifer die Schwachstelle ausnutzen, indem er bösartigen JavaScript-Code in Eingabefelder des Swagger UI einfügt, der im Kontext des Browsers anderer Benutzer ausgeführt wird, die dieselbe kompromittierte Seite aufrufen.

Hinweis: Das obige Bild zeigt ein Beispiel dafür, wie ein Angreifer einen XSS-Payload in das Swagger UI einschleusen kann, indem er eine Sicherheitslücke in den betroffenen Versionen ausnutzt.
Der effektivste Weg, diese Schwachstelle zu entschärfen, besteht darin, sicherzustellen, dass das Swagger UI auf eine nicht betroffene Version aktualisiert wird. Überprüfen Sie die neuesten Versionen des Swagger UI und halten Sie es immer auf dem neuesten Stand.
Für Entwickler, die das Swagger UI verwenden oder anpassen möchten, ist es wichtig, eine ordnungsgemäße Validierung der Eingabedaten durchzuführen, bevor sie in der Oberfläche angezeigt werden. Das Vermeiden der direkten Darstellung von vom Benutzer eingegebenem HTML oder JavaScript wird empfohlen, um XSS-Schwachstellen zu verhindern.
Hier ist ein vereinfachtes Beispiel, wie die Schwachstelle mithilfe des Swagger UI ausgenutzt werden kann:
Dieser Abschnitt dient nur zu Bildungs- und Informationszwecken. Fördern Sie keine böswilligen oder illegalen Aktivitäten und beteiligen Sie sich nicht daran. Befolgen Sie bei der Meldung von Schwachstellen stets die Praktiken der verantwortungsvollen Offenlegung.
Stellen Sie sicher, dass die folgenden Voraussetzungen installiert sind, bevor Sie das Skript ausführen:
pip install selenium
Klonen oder laden Sie dieses Repository auf Ihren Rechner herunter.
Bearbeiten Sie die Datei sites_para_testar.txt und tragen Sie die URLs der Websites, die Sie testen möchten, ein – eine pro Zeile.
Öffnen Sie ein Terminal im Repository-Ordner und führen Sie das Skript mit dem folgenden Befehl aus:
python main.py
Das Skript durchläuft die in der Datei sites_para_testar.txt aufgeführten Websites, ruft deren Swagger-UI-URLs auf und prüft, ob ein XSS-Alert erkannt wird. Die Ergebnisse werden in drei Dateien gespeichert: valido.txt für potenziell anfällige URLs, talvezvalido.txt für URLs, die möglicherweise anfällig sind, und naovalido.txt für nicht anfällige URLs.
Das Skript verwendet die Selenium-Bibliothek, um die Interaktion mit dem Chrome-Browser zu automatisieren. Es lädt die im File sites_para_testar.txt konfigurierten Swagger-UI-URLs, fügt dem Parameter configUrl einen bösartigen Payload hinzu und prüft, ob ein XSS-Alert ausgelöst wird.
Das Skript führt die folgenden Schritte aus:
Es importiert die erforderlichen Selenium-Bibliotheken und andere Abhängigkeiten.
Es konfiguriert die ChromeDriver-Optionen, um SSL- und Zertifikatsfehler zu ignorieren.
Es initialisiert den Chrome-Treiber.
Es liest die zu testenden Websites aus der Datei sites_para_testar.txt und iteriert über sie.
Es öffnet jede Swagger-UI-URL mit dem hinzugefügten bösartigen Payload.
Es versucht zu prüfen, ob ein XSS-Alert ausgelöst wird.
Basierend auf dem Prüfergebnis speichert es die URLs in den Dateien valido.txt, talvezvalido.txt oder naovalido.txt.
Es beendet den Chrome-Treiber.
Dieses Skript wird ausschließlich zu Bildungs- und Sensibilisierungszwecken im Bereich Cybersicherheit bereitgestellt. Es sollte nicht für böswillige oder illegale Zwecke verwendet werden. Der Autor übernimmt keine Verantwortung für eine missbräuchliche Verwendung dieses Skripts oder für Schäden, die aus seiner Verwendung entstehen.
Wenn Sie eine Möglichkeit finden, dieses Skript zu verbessern, oder Vorschläge haben, können Sie gerne einen Pull-Request erstellen.
Dieses Projekt ist unter der MIT-Lizenz lizenziert.