Definition

XSS (Cross-Site Scripting)

Cross-Site Scripting, kurz XSS, ist eine Art von Injection-Security-Angriff, bei dem ein Angreifer Daten, zum Beispiel ein bösartiges Skript, in Inhalte von ansonsten vertrauenswürdigen Websites einfügt. XSS-Angriffe finden statt, wenn eine nicht vertrauenswürdige Quelle ihren eigenen Code in eine Web-Anwendung einschleusen kann und dieser bösartige Code in dynamischen Inhalten enthalten ist, die an den Browser des Opfers geliefert werden.

Bösartige Skripte werden oft in Form von JavaScript-Code-Bits geliefert, die vom Browser des Opfers ausgeführt werden. Exploits können jedoch bösartigen ausführbaren Code in vielen anderen Programmiersprachen enthalten, darunter Java, Ajax, Flash und HTML. XSS-Angriffe können sehr schwerwiegend sein, aber die Schwachstellen, die solche Angriffe ermöglichen, lassen sich relativ leicht ausgleichen.

Cross-Site Scripting ermöglicht es einem Angreifer, böswillige Skripte im Browser eines anderen Benutzers auszuführen. Der Angreifer greift das Opfer jedoch nicht direkt an; vielmehr nutzt der Angreifer eine Schwachstelle in einer Website aus, die das Opfer besucht, und bringt die Website dazu, das bösartige Skript für den Angreifer zu liefern.

So funktioniert Cross-Site Scripting

Wie alle Injection-Angriffe macht sich XSS die Tatsache zunutze, dass Browser valides, sicheres Markup nicht von angreifergesteuertem Markup unterscheiden können - sie führen einfach jeden Markup-Text aus, den sie erhalten. Der Angriff umgeht die Same Origin Policy, die verhindern soll, dass Skripte, die von einer Website stammen, mit Skripten von einer anderen Website interagieren.

Die Same Origin Policy verlangt, dass alle Inhalte auf einer Webseite aus derselben Quelle stammen. Wenn die Same Origin Policy nicht durchgesetzt wird, ist ein Angreifer in der Lage, ein Skript zu injizieren und die Webseite für seine eigenen Zwecke zu modifizieren - zum Beispiel, um Daten zu extrahieren, die es dem Angreifer ermöglichen, sich als authentifizierter Benutzer auszugeben, oder um bösartigen Code einzugeben, der vom Browser ausgeführt wird.

XSS kann auf verschiedene Weise verwendet werden, um ernsthafte Probleme zu verursachen. Die herkömmliche Verwendung von XSS ermöglicht es einem Angreifer, Sitzungs-Cookies zu stehlen, wodurch der Angreifer sich als Benutzer (Opfer) ausgeben kann. Aber es geht nicht nur um das Stehlen von Cookies; Angreifer können XSS verwenden, um Malware zu verbreiten, Websites zu verunstalten, in sozialen Netzwerken Verwüstungen anzurichten, Anmeldedaten zu fälschen und in Verbindung mit Social-Engineering-Techniken schädigende Angriffe zu verüben.

Abbildung 1: Cross-Site Scripting läuft in drei einfachen Schritten ab.
Abbildung 1: Cross-Site Scripting läuft in drei einfachen Schritten ab.

Arten von XSS-Schwachstellen

Es gibt drei Hauptkategorien von Cross-Site-Scripting-Schwachstellen: gespeicherte XSS, gespiegelte XSS und DOM-basierte XSS.

Gespeichertes (persistentes) XSS ist die schädlichste Art von Cross-Site-Scripting-Angriffen. Der Angreifer injiziert ein Skript - auch Payload (Nutzdaten) genannt -, das dauerhaft in der Zielanwendung, zum Beispiel einer Datenbank, gespeichert wird. So fügt der Angreifer beispielsweise ein böswilliges Skript in einen Blog, einen Forumsbeitrag oder ein Kommentarfeld ein.

Die XSS-Payload wird dann als Teil einer Webseite bereitgestellt, wenn das Opfer in einem Browser zu der betroffenen Webseite navigiert. Sobald das Opfer dann die Seite in einem Browser aufruft, führt es das bösartige Skript unbeabsichtigterweise aus.

Reflected XSS ist die häufigste Art der Cross-Site-Scripting-Schwachstellen. Bei dieser Art von Angriff muss der Angreifer die Payload an das Opfer liefern. Daher muss das Payload-Skript des Angreifers Teil der an den Webservergesendeten Anforderung sein und zurückreflektiert werden, damit die HTTP-Antwort die Payload aus der HTTP-Anforderung enthält.

Der Angreifer verwendet Phishing-E-Mails und andere Social-Engineering-Methoden, um das Opfer dazu zu verleiten, versehentlich eine Anforderung an den Server zu stellen, die die XSS-Payload enthält. Das Opfer führt dann das Skript aus, das innerhalb des Browsers reflektiert und ausgeführt wird. Da es sich bei reflektiertem XSS nicht um einen dauerhaften Angriff handelt, muss der Angreifer die Payload an jedes Opfer ausliefern.

DOM-basiertes Cross-Site Scripting ist eine fortgeschrittene Art des XSS-Angriffs, der möglich wird, wenn das Client-seitige Skript der Webanwendung vom Benutzer bereitgestellte Daten in das Document Object Model (DOM) schreibt.

Die Webanwendung liest dann die Daten aus dem DOM und liefert sie an den Browser. Wenn die Daten nicht korrekt behandelt werden, kann der Angreifer eine Payload injizieren, die als Teil des DOM gespeichert wird. Die Payload wird dann ausgeführt, wenn die Daten aus dem DOM zurückgelesen werden.

Methoden zur Verhinderung von Cross-Site Scripting

Im Folgenden sind die besten bekannten Praktiken zur Verhinderung von Cross-Site Scripting aufgeführt:

Das Escaping User Input (Vermeiden von Benutzereingaben) ist eine Möglichkeit, das Auftreten von XSS-Schwachstellen in Anwendungen zu verhindern. Dies bedeutet, dass die Daten, die eine Anwendung erhalten hat, vor dem Rendern für den Benutzer gesichert werden müssen. Durch das Vermeiden von Benutzereingaben wird verhindert, dass Schlüsselzeichen in den Daten, die eine Webseite empfängt, als ausführbarer Code interpretiert werden. Das bedeutet, dass der Browser die Zeichen, die den Beginn oder das Ende des ausführbaren Codes signalisieren, nicht interpretieren kann und sie in „escaped“ übersetzt. Beispielsweise werden manchmal Anführungszeichen, Klammern, eckige Klammern und einige andere Interpunktionszeichen verwendet, um ausführbaren Code abzusetzen. „Escaped“ bedeutet, dass diese Zeichen aus einzelnen Zeichen, die nicht angezeigt würden, in Zeichenketten umgewandelt werden, die der Browser als druckbare Versionen der Zeichen interpretiert.

Das Sanitizing User Input (Bereinigung von Benutzereingaben) ist eine weitere Möglichkeit, Cross-Site-Scripting-Angriffe zu verhindern, was besonders bei Webseiten hilfreich ist, die HTML-Markup erlauben. Bei dieser Präventionsmethode werden die Daten von potenziell ausführbaren Zeichen gesäubert, wodurch inakzeptable Benutzereingaben in ein akzeptables Format umgewandelt werden und sichergestellt wird, dass die empfangenen Daten nicht als ausführbarer Code interpretiert werden können.

Die Input Validation (Eingabevalidierung) stellt sicher, dass eine Anwendung die richtigen Daten wiedergibt und verhindert, dass bösartige Daten eine Website, eine Datenbank und Benutzer schädigen. Die Validierung von Eingaben trägt dazu bei, XSS in Formularen zu verhindern, da sie einen Benutzer daran hindert, Sonderzeichen in die Dateneingabefelder von Webseiten einzufügen, indem er die Anfrage ablehnt. Die Eingabevalidierung trägt dazu bei, die Möglichkeit schädlicher Auswirkungen zu verringern, falls ein Angreifer eine solche XSS-Schwachstelle entdecken sollte.

Diese Definition wurde zuletzt im Oktober 2020 aktualisiert

Erfahren Sie mehr über Bedrohungen