
Script proof-of-concept basato su Python che dimostra la vulnerabilità XSS CVE-2018-25031 in Swagger UI utilizzando Selenium per il rilevamento automatizzato su più endpoint.
Questo repository contiene uno script Python che dimostra una prova di concetto (POC) di una vulnerabilità di Cross-Site Scripting (XSS) nello Swagger UI, utilizzando la libreria Selenium. L'obiettivo di questa POC è identificare i siti suscettibili a questa vulnerabilità attraverso lo sfruttamento dello Swagger UI con un payload dannoso.
Lo Swagger UI è uno strumento ampiamente utilizzato per visualizzare e interagire con le API tramite un'interfaccia utente intuitiva. Tuttavia, nella versione 2.9.2, è stata identificata una vulnerabilità di Cross-Site Scripting (XSS) che potrebbe consentire a un attaccante di iniettare codice JavaScript dannoso nelle pagine Swagger UI caricate.
L'XSS si verifica quando un'applicazione non convalida adeguatamente i dati inseriti dall'utente prima di visualizzarli nella pagina. In questo caso, un attaccante può sfruttare la vulnerabilità inserendo codice JavaScript dannoso nei campi di input dello Swagger UI, che verrà eseguito nel contesto del browser di altri utenti che accedono alla stessa pagina compromessa.

Nota: L'immagine sopra illustra un esempio di come un attaccante può inserire un payload XSS nello Swagger UI, sfruttando una falla di sicurezza nelle versioni interessate.
Il modo più efficace per mitigare questa vulnerabilità è garantire che lo Swagger UI sia aggiornato a una versione non affetta. Controlla le versioni più recenti dello Swagger UI e mantienilo sempre aggiornato.
Per gli sviluppatori che desiderano utilizzare o personalizzare lo Swagger UI, è fondamentale eseguire un'adeguata validazione dei dati di input prima di visualizzarli nell'interfaccia. Evitare il rendering diretto di HTML o JavaScript inseriti dagli utenti è una pratica consigliata per prevenire vulnerabilità XSS.
Ecco un esempio semplificato di come la vulnerabilità può essere sfruttata usando lo Swagger UI:
Questa sezione è destinata esclusivamente a scopi educativi e informativi. Non incoraggiare né partecipare ad attività dannose o illegali. Segui sempre le pratiche di divulgazione responsabile quando segnali vulnerabilità.
Assicurati di avere installati i seguenti prerequisiti prima di eseguire lo script:
pip install selenium
Clona o scarica questo repository sulla tua macchina.
Modifica il file sites_para_testar.txt e inserisci gli URL dei siti che desideri testare, uno per riga.
Apri un terminale nella cartella del repository ed esegui lo script usando il seguente comando:
python main.py
Lo script scorrerà i siti elencati nel file sites_para_testar.txt, accederà ai loro URL dello Swagger UI e verificherà se viene rilevato un avviso XSS. I risultati verranno registrati in tre file: valido.txt per gli URL potenzialmente vulnerabili, talvezvalido.txt per gli URL che potrebbero essere vulnerabili e naovalido.txt per gli URL non vulnerabili.
Lo script utilizza la libreria Selenium per automatizzare l'interazione con il browser Chrome. Carica gli URL dello Swagger UI configurati nel file sites_para_testar.txt, aggiunge un payload dannoso al parametro configUrl e verifica se viene attivato un avviso XSS.
Lo script si articola nelle seguenti fasi:
Importa le librerie necessarie di Selenium e altre dipendenze.
Configura le opzioni di ChromeDriver per ignorare errori SSL e di certificato.
Inizializza il driver di Chrome.
Legge i siti da testare dal file sites_para_testar.txt e itera su di essi.
Apre ogni URL dello Swagger UI con il payload dannoso aggiunto.
Tenta di verificare se viene attivato un avviso XSS.
In base al risultato della verifica, registra gli URL nei file valido.txt, talvezvalido.txt o naovalido.txt.
Chiude il driver di Chrome.
Questo script è fornito esclusivamente a scopo educativo e di sensibilizzazione sulla sicurezza informatica. Non deve essere utilizzato per scopi dannosi o illegali. L'autore non si assume alcuna responsabilità per un uso improprio di questo script o per eventuali danni derivanti dal suo utilizzo.
Se trovi un modo per migliorare questo script o hai suggerimenti, sentiti libero di aprire una pull request.
Questo progetto è concesso in licenza sotto la Licenza MIT.