Was ist XSS (Cross-Site Scripting)?
Cross-Site Scripting, oder XSS, ist eine Sicherheitslücke auf Websites, die es Angreifern ermöglicht, schädliche Skripte zu Webseiten hinzuzufügen. Meistens sind diese Skripte in JavaScript geschrieben.
Wenn jemand eine von XSS betroffene Seite besucht, führt sein Browser das Skript des Angreifers aus. Dies kann zu gestohlenen Cookies, gekaperten Sitzungen oder Aktionen führen, die ohne die Erlaubnis des Benutzers ausgeführt werden.
XSS, ähnlich wie SQL Injection, wird regelmäßig in den OWASP Top 10 als eine der häufigsten Schwachstellen von Webanwendungen aufgeführt.
Wie funktioniert XSS?
XSS zielt oft auf Webanwendungen ab, die Benutzereingaben nicht korrekt überprüfen und bereinigen.
Zum Beispiel, wenn ein Kommentarfeld rohes HTML oder JavaScript ohne jegliche Filterung zulässt, könnte ein Angreifer Code wie diesen hinzufügen:
<script>alert('Hacked!');</script>
Wenn Opfer die Seite ansehen, wird der bösartige Code in ihrem Browser ausgeführt.
Warum XSS in der Cybersicherheit wichtig ist
XSS kann zu einem größeren Sicherheitsbruch führen :
- Kontoübernahme (Diebstahl von Sitzungscookies, um Benutzer zu imitieren)
- Datendiebstahl (Erfassung von Formulareingaben wie Passwörter oder Kreditkarten)
- Phishing-Angriffe (Einschleusen gefälschter Anmeldeformulare)
- Malware-Auslieferung (Weiterleitung von Benutzern zu bösartigen Websites)
Arten von XSS
- DOM-basiertes XSS
- Der Angriff erfolgt vollständig im Browser durch Manipulation des Document Object Model (DOM) ohne Einbeziehung des Servers.
- Gespeichertes XSS
- Bösartiges Skript wird dauerhaft auf dem Server gespeichert, wie in der Datenbank oder auf der Profilseite.
- Reflektiertes XSS
- Skript wird von einem Webserver reflektiert (z.B. in URL oder Fehlermeldung), das Skript wird ausgeführt, wenn das Opfer auf den von Angreifern erstellten Link klickt.
Wie man XSS verhindert
- Eingabesäuberung & Ausgabe-Codierung: Immer Benutzereingabedaten bereinigen, bevor sie verarbeitet werden, und Benutzereingaben in ein sicheres Format umwandeln.
- Verwendung von Content Security Policy (CSP): Beschränkt, welche Skripte im Browser ausgeführt werden können.
- Vermeidung von eval() und Inline-JavaScript: Um Injektionsrisiken zu reduzieren.
- Sicherheitstests (DAST/IAST): Sicherheitstests durchführen, um Schwachstellen frühzeitig zu erkennen.
Beispiel aus der realen Welt - Samy-Wurm (MySpace, 2005)
Was passiert ist: Samy Kamkar veröffentlichte ein MySpace-Profil, das eine gespeicherte XSS-Nutzlast enthielt. Wenn andere Benutzer das Profil ansahen, lief die Nutzlast in ihren Browsern, sie (a) fügte Samy als Freund hinzu, (b) fügte den Satz „Samy ist mein Held“ zu ihren Profilen hinzu und (c) replizierte sich selbst auf die Profilseiten dieser Benutzer.
Auswirkung: Der Wurm verbreitete sich selbst auf ~1 Million Benutzer innerhalb von ~20 Stunden, was MySpace vorübergehend offline zwang.
Warum es funktionierte: MySpace erlaubte nicht entschlüsseltes HTML/Attribute in Profilfeldern, was die Ausführung gespeicherter Skripte in den Browsern der Besucher ermöglichte.
Lektionen / Lösung: Richtige Ausgabe-Codierung, Eingabe-Sanitization, Entfernung von HTML in Profilfeldern und schnelle Patch-Bereitstellung. Samy sah sich später rechtlichen Konsequenzen gegenüber und MySpace setzte Filter ein.
Verwandte Begriffe
- SQL Injection
- DAST (Dynamic Application Security Testing)
- OWASP Top 10
- CSRF (Cross-Site Request Forgery)