Unsachgemäße Neutralisierung alternativer XSS-Syntax

Beschreibung

Unsachgemäße Neutralisierung alternativer XSS-Syntax ist eine Variante von Cross-site Scripting (XSS), die auftritt, wenn Software versucht, XSS-Angriffe zu filtern, aber alternative Syntax, Codierungsschemata oder weniger bekannte Angriffsvektoren nicht berücksichtigt, die dasselbe bösartige Ergebnis erzielen. Angreifer umgehen Sicherheitsfilter mit Techniken wie HTML-Entity-Codierung (<script>), URL-Codierung (%3Cscript%3E), Unicode-Varianten, Null-Bytes, fehlerhafte Tags, CSS-basierter Injection, SVG-Skripten oder browserspezifischen Parsing-Eigenheiten. Diese Schwachstelle verdeutlicht die Schwierigkeit, effektive XSS-Prävention durch Blacklist-basierte Filterung zu implementieren, da die Anzahl der Umgehungstechniken ständig wächst.

Risiko

Diese Schwäche demonstriert, warum Blacklist-basierte XSS-Filterung konstant scheitert. Sicherheitsfilter, die <script> blockieren, können durch <ScRiPt>, <script/xss>, <img src=x onerror=alert(1)> oder Hunderte anderer Variationen umgangen werden. Angreifer unterhalten umfangreiche Payload-Datenbanken, die speziell darauf ausgelegt sind, gängige Filter zu umgehen. Browser-Parsing-Unterschiede bedeuten, dass ein in einem Browser blockierter Payload in einem anderen ausgeführt werden kann. Die kontinuierliche Entwicklung von HTML5, JavaScript und Browser-Features führt neue Angriffsvektoren schneller ein, als Filter aktualisiert werden können. Organisationen, die sich für XSS-Prävention auf Pattern-Matching verlassen, sind fortlaufend anfällig, da neue Umgehungstechniken auftauchen.

Lösung

Geben Sie Blacklist-basierte Filterung vollständig zugunsten ordnungsgemäßer Ausgabecodierung und Allowlist-Validierung auf. Implementieren Sie kontextbewusste Ausgabecodierung: HTML-Entity-Codierung für HTML-Body, JavaScript-Codierung für Script-Kontexte, URL-Codierung für URLs und CSS-Codierung für Style-Kontexte. Verwenden Sie etablierte Sicherheitsbibliotheken und Frameworks, die die Codierung automatisch handhaben. Setzen Sie strikte Content Security Policy (CSP) ein, um Inline-Skriptausführung unabhängig von Filter-Umgehungen zu verhindern. Wenn Rich-HTML-Eingaben erforderlich sind, verwenden Sie bewährte Bereinigungsbibliotheken (DOMPurify, HTML Purifier), die sicheres HTML parsen und rekonstruieren, anstatt musterbasierte Filterung zu versuchen.

Häufige Auswirkungen

AuswirkungDetails
VertraulichkeitBereich: Vertraulichkeit

Umgangene Filter ermöglichen Angreifern, Skripte auszuführen, die Session-Token, Anmeldedaten und sensible Seitendaten durch alternative Codierung oder Syntax stehlen.
IntegritätBereich: Integrität

Erfolgreiche Filter-Umgehung ermöglicht Seitenmodifikation, Content-Injection und unbefugte Aktionen durch Skripte, die der Erkennung entgehen.
ZugriffskontrolleBereich: Zugriffskontrolle

Session-Hijacking durch filter-umgehende Payloads ermöglicht vollständige Kontoübernahme trotz implementierter Sicherheitsmaßnahmen.

Beispielcode + Lösungscode

Anfälliger Code

<?php
// ANFÄLLIG: Blacklist-Filterung - leicht umgehbar
$input = $_GET['q'];

// Filterversuche (alle können umgangen werden)
$input = str_ireplace('<script>', '', $input);
$input = str_ireplace('javascript:', '', $input);
$input = preg_replace('/on\w+\s*=/i', '', $input);

echo "Suche: " . $input;

// Umgehungen:
// <scr<script>ipt>alert(1)</script>
// <img src=x onerror=alert(1)>
// <svg onload=alert(1)>
// &#60;script&#62;alert(1)&#60;/script&#62;
// <a href="jav&#x09;ascript:alert(1)">klicken</a>
?>

Korrigierter Code

<?php
// SICHER: Ausgabecodierung anstelle von Blacklist-Filterung
$input = $_GET['q'] ?? '';

// Immer Ausgabe codieren - behandelt alle Variationen automatisch
$safe_input = htmlspecialchars($input, ENT_QUOTES | ENT_HTML5, 'UTF-8');
echo "Suche: " . $safe_input;

// Für JSON/JavaScript-Kontexte
$json_safe = json_encode($input, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP);

// CSP-Header blockiert Inline-Skripte selbst wenn Codierung fehlschlägt
header("Content-Security-Policy: default-src 'self'; script-src 'self'");
?>

<!-- Für Rich Text DOMPurify clientseitig verwenden -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/dompurify/3.0.6/purify.min.js"></script>
<script>
var userContent = /* Server-Daten */;
var clean = DOMPurify.sanitize(userContent);
document.getElementById('content').innerHTML = clean;
</script>

Ausgenutzt in der Praxis

Mehrere WAF-Bypass-Kampagnen (Verschiedene Organisationen, fortlaufend)

Sicherheitsforscher und Angreifer entdecken kontinuierlich Filter-Umgehungen in Web Application Firewalls und benutzerdefinierten XSS-Filtern. Dokumentierte Umgehungen haben WAF-Produkte von großen Sicherheitsanbietern betroffen, wobei neue Umgehungstechniken regelmäßig auf Sicherheitskonferenzen und Bug-Bounty-Plattformen veröffentlicht werden.


Tools zum Testen/Ausnutzen

  • XSS Polyglot Payloads — Sammlung von Polyglot-Payloads, die darauf ausgelegt sind, über mehrere Kontexte hinweg auszuführen und Filter zu umgehen.

  • Burp Suite Intruder — automatisiertes Testen mit XSS-Payload-Listen einschließlich Codierungsvariationen und Filter-Umgehungen.

  • XSS Hunter — Blind-XSS-Erkennungsplattform zur Identifizierung von Filter-Umgehungen in Stored-XSS-Szenarien.


CVE-Beispiele

  • CVE-2023-49103 — ownCloud XSS-Filter-Umgehung durch alternative Codierung.

  • CVE-2022-40684 — Fortinet Authentifizierungs-Bypass ermöglicht XSS durch Filter-Umgehung.


Referenzen

  1. MITRE. "CWE-87: Improper Neutralization of Alternate XSS Syntax." https://cwe.mitre.org/data/definitions/87.html

  2. PortSwigger. "Cross-site scripting (XSS) cheat sheet." https://portswigger.net/web-security/cross-site-scripting/cheat-sheet