Cross Site Scripting (XSS)

Cross Site Scripting (XSS) ist eine Art von Sicherheitslücke, die in Web-Anwendungen auftreten kann. Es tritt auf, wenn eine Web-Anwendung unsichere Eingaben von Benutzern nicht ordnungsgemäß validiert und sanitiert, bevor sie in die Anwendung eingefügt werden.

Auswirkungen von Cross Site Scripting (XSS)

Durch die Nutzung von XSS-Angriffen können Angreifer skriptbasierte Inhalte in Webseiten einbetten, die von anderen Benutzern aufgerufen werden. Dies kann zu verschiedenen Arten von Schäden führen, wie beispielsweise Datenmanipulation, Datenverlust oder sogar zum Diebstahl von Benutzerdaten.

Ein Beispiel für einen XSS-Angriff wäre, wenn ein Angreifer ein skriptbasiertes Element in das Kommentarfeld einer Webseite einfügt, die von anderen Benutzern aufgerufen wird. Wenn die Webseite nicht ordnungsgemäß validiert und sanitiert, könnte das skriptbasierte Element ausgeführt werden, wenn ein Benutzer die Webseite aufruft. Dies könnte dazu führen, dass der Angreifer Zugriff auf vertrauliche Benutzerdaten erlangt, die auf dem System gespeichert sind.

Um XSS-Angriffe zu vermeiden, ist es wichtig, dass Web-Anwendungen ordnungsgemäß konfiguriert und gepflegt werden, um sicherzustellen, dass unsichere Eingaben von Benutzern ordnungsgemäß validiert und sanitiert werden, bevor sie in die Anwendung eingefügt werden. Dies kann durch die Verwendung von Sicherheitsvorkehrungen wie Eingabevalidierung und -sanierung erreicht werden.

Arten von Cross Site Scripting (XSS)

Es gibt drei Haupttypen von Cross Site Scripting (XSS):

  1. Reflektierendes XSS (Reflected XSS): Dies ist der häufigste Typ von XSS-Angriffen. Er tritt auf, wenn ein Angreifer skriptbasierte Inhalte in einer Webseite einbetten kann, die von anderen Benutzern aufgerufen werden. Die skriptbasierten Inhalte werden dann von der Webseite an den Benutzer zurückgesendet und ausgeführt, wodurch der Angreifer Zugriff auf vertrauliche Benutzerdaten erlangen kann.
  2. Persistentes / Gespeichertes XSS (Persistent / Stored XSS): Dieser Typ von XSS-Angriffen tritt auf, wenn skriptbasierte Inhalte in einer Webseite dauerhaft gespeichert werden, anstatt von Benutzern in Echtzeit eingefügt zu werden. Dies kann zu langanhaltenden Schäden führen, da die skriptbasierten Inhalte immer wieder ausgeführt werden, wenn die Webseite aufgerufen wird.
  3. DOM-basiertes XSS (DOM-based XSS): Dieser Typ von XSS-Angriffen tritt auf, wenn ein Angreifer skriptbasierte Inhalte in die Document Object Model (DOM) einer Webseite einbetten kann. Die DOM ist eine Struktur, die das Verhalten und die Inhalte einer Webseite beschreibt. Wenn skriptbasierte Inhalte in die DOM eingefügt werden, können sie von der Webseite ausgeführt werden, wodurch der Angreifer Zugriff auf vertrauliche Benutzerdaten erlangen kann.

Ausnutzen von reflektierendes Cross Site Scripting- mit Beispiel-Code

Ein Beispiel dafür, wie reflektierendes Cross Site Scripting (XSS) ausgenutzt werden könnte, wäre folgende:

Angenommen, ein Angreifer möchte einen manipulierten Link erstellen, der einen skriptbasierten Code enthält. Der Link könnte beispielsweise so aussehen:

http://www.example.com/search?q=<script>alert("XSS-Angriff!")</script>

In diesem Beispiel enthält der manipulierte Link einen skriptbasierten Code, der eine Benachrichtigung mit der Nachricht “XSS-Angriff!” anzeigt, wenn die Webseite aufgerufen wird. Wenn die Webseite nicht ordnungsgemäß validiert und sanitiert, könnte der skriptbasierte Code ausgeführt werden, wodurch der Angreifer Zugriff auf vertrauliche Benutzerdaten erlangen könnte.

Um den manipulierten Link auszunutzen, müsste der Angreifer ihn an andere Benutzer senden, entweder per E-Mail, über soziale Medien oder auf andere Weise. Wenn ein Benutzer auf den Link klickt, würde er die Webseite aufrufen, die den skriptbasierten Code enthält. Dieser Code würde dann ausgeführt werden, wodurch der Angreifer Zugriff auf vertrauliche Benutzerdaten erlangen könnte.

Ausnutzen von persistentes Cross Site Scripting (XSS) – mit Beispiel-Code

Ein Beispiel dafür, wie persistentes Cross Site Scripting (XSS) ausgenutzt werden könnte, wäre folgende:

Angenommen, es gibt eine Webseite, die ein Kommentarfeld enthält, in dem Benutzer Kommentare zu bestimmten Themen hinterlassen können. Wenn die Webseite nicht ordnungsgemäß validiert und sanitiert, könnte ein Angreifer skriptbasierte Inhalte in das Kommentarfeld einfügen, die von anderen Benutzern aufgerufen werden.

Der Angreifer könnte beispielsweise einen skriptbasierten Code erstellen, der vertrauliche Benutzerdaten, wie Passwörter oder Kreditkartennummern, an einen externen Server sendet, sobald ein Benutzer die Webseite aufruft. Der skriptbasierte Code würde dann in das Kommentarfeld eingefügt und von der Webseite gespeichert werden, wodurch der Code bei jedem Aufruf der Webseite ausgeführt wird.

Um den skriptbasierten Code auszunutzen, müsste der Angreifer ihn in das Kommentarfeld einfügen und auf die Webseite hochladen. Sobald ein Benutzer die Webseite aufruft, würde der skriptbasierte Code ausgeführt werden und vertrauliche Benutzerdaten an den externen Server senden. Dies könnte zu langanhaltenden Schäden führen, da der skriptbasierte Code immer wieder ausgeführt wird, wenn die Webseite aufgerufen wird.

Ein Beispiel dafür, wie persistierendes Cross Site Scripting (XSS) ausgenutzt werden könnte, wäre folgende:

Angenommen, ein Angreifer möchte einen manipulierten Kommentar erstellen, der einen skriptbasierten Code enthält. Der Kommentar könnte beispielsweise so aussehen:

<script>alert("XSS-Angriff!")</script>

Ausnutzen von DOM-basiertes Cross Site Scripting (XSS) – mit Beispiel-Code

Ein Beispiel dafür, wie DOM-basiertes Cross Site Scripting (XSS) ausgenutzt werden könnte, wäre folgende:

Angenommen, ein Angreifer möchte einen manipulierten Code erstellen, der einen skriptbasierten Code in die Document Object Model (DOM) einer Webseite einfügt. Der manipulierte Code könnte beispielsweise so aussehen:

document.getElementById("target-element").innerHTML = "<script>alert("XSS-Angriff!")</script>";

In diesem Beispiel enthält der manipulierte Code einen skriptbasierten Code, der eine Benachrichtigung mit der Nachricht “XSS-Angriff!” anzeigt, wenn die Webseite aufgerufen wird. Wenn die Webseite nicht ordnungsgemäß validiert und sanitiert, könnte der skriptbasierte Code in die DOM der Webseite eingefügt werden und ausgeführt werden, wodurch der Angreifer Zugriff auf vertrauliche Benutzerdaten erlangen könnte.

Um den manipulierten Code auszunutzen, müsste der Angreifer ihn in eine Webseite einfügen, die von anderen Benutzern aufgerufen wird. Wenn der Code ausgeführt wird, könnte er Zugriff auf vertrauliche Benutzerdaten erlangen, die auf dem System gespeichert sind.

Empfohlene Gegenmaßnahmen um Cross Site Scripting (XSS) zu verhindern

Um Cross Site Scripting (XSS) Angriffe zu verhindern, gibt es verschiedene Gegenmaßnahmen, die Web-Entwickler ergreifen können. Einige Beispiele für solche Gegenmaßnahmen sind:

  1. Eingabevalidierung (Input Validation): Durch die Verwendung von Eingabevalidierung können Web-Entwickler sicherstellen, dass unsichere Eingaben von Benutzern ordnungsgemäß validiert werden, bevor sie in die Anwendung eingefügt werden. Dies kann dazu beitragen, dass skriptbasierte Inhalte, die möglicherweise von Angreifern eingefügt werden, nicht in die Anwendung eingefügt werden.
  2. Eingabesanierung (Input Sanitization): Durch die Verwendung von Eingabesanierung können Web-Entwickler sicherstellen, dass unsichere Eingaben von Benutzern ordnungsgemäß sanitiert werden, bevor sie in die Anwendung eingefügt werden. Dies bedeutet, dass skriptbasierte Inhalte entfernt oder neutralisiert werden, bevor sie in die Anwendung eingefügt werden.
  3. Escaping von speziellen Zeichen: Dies beinhaltet das Hinzufügen von “Escape”-Zeichen vor speziellen Zeichen in Benutzereingaben, bevor sie in die Web-Anwendung eingefügt werden. Auf diese Weise können skriptbasierte Inhalte verhindert werden, die von Angreifern verwendet werden könnten, um XSS-Angriffe durchzuführen.
  4. Verwendung von HTTP-Only-Cookies: Durch die Verwendung von HTTP-Only-Cookies können Web-Entwickler sicherstellen, dass Cookies nicht von skriptbasierten Inhalten ausgelesen werden können. Dies kann dazu beitragen, dass skriptbasierte Inhalte, die möglicherweise von Angreifern eingefügt werden, keinen Zugriff auf vertrauliche Benutzerdaten haben.
  5. Verwendung von Content Security Policy (CSP): Durch die Verwendung von Content Security Policy (CSP) können Web-Entwickler festlegen, welche Arten von Inhalten auf einer Webseite ausgeführt werden dürfen und welche nicht. Dies kann dazu beitragen, dass skriptbasierte Inhalte, die möglicherweise von Angreifern eingefügt werden, nicht ausgeführt werden.

 

Norbert Hofmann

Ich bin ein leidenschaftlicher ITler und ich liebe IT-Security. In meiner Freizeit tanze ich sehr gerne Standard.