EN

DOM-basierte XSS-Schwachstelle – Testen, Vorbeugen und Beheben

In diesem Artikel:

Das Document Object Model (DOM) bietet zwar einen leistungsstarken und flexiblen Ansatz zur Änderung von Elementen eines Dokuments, kann aber auch als Angriffsvektor genutzt werden. Dieser Artikel befasst sich mit den Grundlagen, Standard-Angriffstechniken und Best Practices, wie Unternehmen DOM-basierte XSS-Angriffe verhindern können.

Was ist DOM?

Das Document Object Model (DOM) ist eine Programmierschnittstelle, die definiert, wie Elemente in einem HTML- oder XML-Dokument erstellt, geändert oder gelöscht werden können. DOM bietet eine Standard-API für die dynamische Änderung von Inhalt, Stil und Struktur von Webseitendokumenten. 

Ein DOM-Modell stellt jedes Element als Knoten in einem baumartigen System dar, was den programmatischen Zugriff und die Verwaltung der Elemente erleichtert. Indem es die Manipulation von Dokumenten erlaubt, ermöglicht ein DOM-Modell die objektorientierte Darstellung von Webseiten. Auf diese Weise können Programmiersprachen wie JavaScript dynamische Webseiten verändern und erstellen. DOM ist plattform- und sprachneutral und kann von mehreren Anwendungen und Umgebungen gleichzeitig verwendet werden.

Cross-Site Scripting erklärt

Cross-Site Scripting (XSS) ist eine Sicherheitslücke, die es Angreifern ermöglicht, bösartigen Code im Webbrowser eines Opfers auszuführen, indem sie die Same-Origin-Richtlinie umgehen. Ein erfolgreicher XSS-Angriff ermöglicht es dem Hacker, sich als das Opfer auszugeben, mit der Erlaubnis, auf Daten zuzugreifen und Aktionen wie ein legitimer Benutzer durchzuführen. Handelt es sich bei dem Opfer um einen Benutzer mit privilegiertem Zugang, kann der Angreifer die vollständige Kontrolle über den Anwendungsserver erlangen und ihn so weiteren Angriffen aussetzen. 

Wenn eine Website für XSS anfällig ist, manipuliert der Angreifer clientseitige Skripte, um den Benutzern manipuliertes JavaScript zu präsentieren. Der clientseitige Code führt dann dieses schadhafte JavaScript im Browser aus, so dass der Angreifer die Interaktionen zwischen dem Benutzer und dem Web-/Anwendungsserver abfangen kann. Websites, die Benutzereingaben nicht validieren, bevor sie sie in ihren Ausgaben verwenden, sind in der Regel anfällig für XSS-Angriffe. Während verschiedene Frameworks (z. B. ActiveX, Flash, CSS und VBScript) für XSS anfällig sind, fallen dynamische Websites häufig durch den Angriff auf, da solche Sites meist auf JavaScript basieren. 

Es gibt drei Arten von XSS-Angriffen:

Was ist DOM-basiertes XSS?

DOM-basiertes XSS ist eine Cross-Site-Scripting-Schwachstelle, die es Angreifern ermöglicht, durch Manipulation der Browser-Umgebung des Clients eine Schadsoftware in eine Webseite einzuschleusen. Da diese Angriffe auf dem Document Object Model beruhen, werden sie auf der Client-Seite nach dem Laden der Seite ausgeführt. Bei solchen Angriffen bleiben der HTML-Quellcode und die Antwort auf den Angriff unverändert, so dass die bösartige Eingabe nicht in der Serverantwort enthalten ist. Da die Schadsoftware in der Browser-Umgebung des Clients gespeichert wird, kann der Angriff mit herkömmlichen Tools zur Analyse des Datenverkehrs nicht erkannt werden. 

DOM-basierte XSS-Angriffe können nur erkannt werden, wenn das Dokumentenobjektmodell und die clientseitigen Skripte zur Laufzeit überprüft werden.

Grundsätzlich führen Angreifer DOM-basierte Cross-Site-Scripting-Angriffe auf Anwendungen mit einem ausführbaren Pfad aus, auf dem die Daten von einer Quelle zu einer Senke gelangen. Quellen sind JavaScript-Attribute, die als Speicherort für schadhafte Eingaben dienen können. Dazu gehören u. a. document.URL, document.referrer, location.search und location.hash. Eine Senke ist ein Ort oder eine Funktion, die die schadhafte Funktion in einer HTML-Darstellung ausführt. Beispiele für Senken sind: eval, setTimeout, setInterval und element.innerHTML und andere.

XSS Prävention Guide

Leitfaden

Cross-Site-Scripting (XSS) ist einer der bekanntesten Injektionsangriffe. Erfahren Sie, wie Sie diese Angriffsart erkennen und verhindern können.

Mehr erfahren

Wie man DOM XSS verhindert und wie wichtig es für die Sicherheit ist

Die DOM-basierte XSS-Schwachstelle ermöglicht es Angreifern, Cookies oder Sitzungen von legitimen Benutzern zu stehlen/zu verändern, um auf sensible Daten/Funktionen zuzugreifen. Im folgenden Abschnitt werden Strategien zur Verhinderung von DOM XSS-basierten Angriffen untersucht.

Verhinderung von DOM XSS-Angriffen

Einige Strategien zur Verhinderung von DOM-basiertem XSS umfassen:

Verwendung von JavaScript-Frameworks

JavaScript-Frameworks wie React und AngularJS wurden mit bewährten Sicherheitspraktiken entwickelt, die eine Ad-hoc-HTML-Konstruktion verhindern und es Entwicklern erschweren, Schlupflöcher einzubauen, die es Angreifern ermöglichen, bösartige Benutzereingaben in Web Document Object-Modelle einzubetten. 

In AngularJS werden Eingaben durch dynamisch geschweifte Klammern abgesichert, da diese automatisch escaped werden. 

<div>{{dynamicContent}}</div>

Das Binden von Inhalten in ReactJS innerhalb geschweifter Klammern ermöglicht auch ein automatisches Escaping:

render() {
 return <div>{dynamicContent}</div>
}

Vermeiden Sie die Verwendung von URI-Fragmenten.

Der Universal Resource Indicator (URI) ist ein interner Seitenverweis, der hauptsächlich dazu dient, den Zustand einer JavaScript-Seite zu erhalten, nachdem ein Benutzer die Website aktualisiert hat. Der URI ist eine Zeichenfolge, die mit einer Raute beginnt und am Ende der URL auf einen Abschnitt innerhalb der Seite verweist. URIs dienen als DOM-basierte XSS-Angriffsflächen, da sie das dynamische Laden und Ändern von Inhalten ermöglichen, ohne direkt mit der Serverseite zu interagieren.

Der Angreifer kann bösartige Skripte in URIs einbetten und den Benutzer dazu verleiten, sie auszuführen. Um solche Angriffe zu verhindern, sollten Entwickler die Verwendung von URIs nach Möglichkeit vermeiden. Sollte ein URI dennoch notwendig sein, empfiehlt es sich, dynamische Inhalte innerhalb des Fragments zu escapen.

Erzwingen Sie eine Inhaltssicherheitsrichtlinie (CSP).

Die meisten modernen Browser unterstützen die Content Security Policy – einen Sicherheitsmechanismus, der explizit entwickelt wurde, um eine zusätzliche Schutzebene gegen Angriffe wie Injection, Clickjacking und Cross-Site-Scripting-Angriffe zu bieten. Die Konfiguration des HTTP Content Security Policy Response Headers bietet Webentwicklern die Kontrolle über den Ressourcenzugriff für jede Benutzerrolle. Entwickler können auch gültige Skript-Endpunkte und Server-Ursprünge festlegen und so die Ausführung von bösartigen, vom Benutzer bereitgestellten Nutzdaten verhindern.

Verwenden Sie einen automatischen DOM XSS-Schwachstellen-Scanner.

Entwicklungsteams sollten einen automatisierten Scanner einsetzen, um Anwendungen zur Laufzeit kontinuierlich auf DOM-XSS-Schwachstellen zu testen. Tools wie die Crashtest Security Suite scannen JavaScript, APIs und Webanwendungen ohne falsch positive oder negative Ergebnisse und eliminieren so tote Winkel in der DOM-XSS-Sicherheit. 

Warum ist die Verhinderung von DOM-XSS wichtig für Ihr Unternehmen?

Während DOM-basiertes XSS eine clientseitige Injektionsschwachstelle ist, werden die bösartigen Nutzdaten durch Code ausgeführt, der vom Server stammt. Es liegt daher in der Verantwortung der Anwendungsentwickler, einen Schutz auf Code-Ebene gegen DOM-basierte XSS-Angriffe zu implementieren. 

DOM-basierte XSS-Beispiele

Einige Beispiele für DOM-basierte XSS-Angriffe sind:

1. Angriff basierend auf anfälligem Inhalt

Nehmen wir eine HTML-Webseite mit dem folgenden Inhalt an:

<HTML>
<TITLE>Welcome!</TITLE>
Hi
<SCRIPT>
var pos=document.URL.indexOf(„name=“)+5;
document.write(document.URL.substring(pos,document.URL.length));
</SCRIPT>
<BR>
Welcome
…
</HTML>

Diese Seite wird normalerweise als Landing Page für Kontoinhaber verwendet, z. B. http://www.vulnerable.site/welcome.html?name=Joe.

In solchen Fällen können Angreifer das DOM ausnutzen, um die Abfragezeichenfolge so zu ändern, dass sie mit XSS endet, z. B:

http://www.vulnerable.site/welcome.html?name=alert(document.cookie) 

2. Angriffe auf der Grundlage von anfälligen Benutzerformularen

Nehmen wir einen Code an, mit dem der Benutzer eine Zeitzone auswählen kann:

In diesem Fall ruft die HTTP-Anfrage http://www.some.site/page.html?default=CST die Seite im Client-Browser auf.

Angreifer können einen DOM-basierten XSS-Angriff starten, indem sie eine bösartige URL über ein Skript wie folgt senden:

http://www.example.site/page.html?default=<script>alert(document.cookie)</script>

Wenn Sie auf diesen Link klicken, wird eine Anfrage an die Seite www.example.site gesendet und ein DOM-Objekt für die Seite erstellt, so dass der URL-Parameter document.location die Zeichenfolge enthält:

http://www.example.site/page.html?default=<script>alert(document.cookie)</script>

Jeder Browser, der diese Seite aufruft, führt das bösartige Skript (alert(document.cookie)) aus.

Lesen Sie unseren Leitfaden zur Vermeidung von XSS-Schwachstellen

FAQs

DOM-XSS vs. Reflected-XSS: Was ist der Unterschied?

Während DOM-basiertes XSS einige Ähnlichkeiten mit traditionellem Reflected XSS aufweist, gibt es einige grundlegende Unterschiede in Technik und Implementierung.

  • Reflected-XSS zielt darauf ab, clientseitige Daten in den serverseitigen Code von HTML-Dokumenten einzubetten, während bei DOM-basiertem XSS die bösartigen Nutzdaten in der clientseitigen (Browser-)Umgebung referenziert und ausgeführt werden.
  • Reflected-XSS kann nur auf dynamische Webseiten abzielen, während DOM-basiertes XSS auf statische und dynamische Webseiten abzielt.
  • DOM-basierte Angriffe bleiben weitgehend unentdeckt, wenn der Angreifer serverseitige Identifizierungstechniken vermeidet, während herkömmliche Reflected-XSS-Angriffe mit Hilfe von Intrusion-Detection-Systemen und Protokollen leicht entdeckt werden können.

Wie weit sind DOM-basierte Schwachstellen verbreitet?

DOM-basierte XSS-Schwachstellen sind ungewöhnlich und werden nur in etwa 1,2 % der Webanwendungen gefunden. Da solche Schwachstellen mit normalen automatischen Scannern nur schwer aufzuspüren sind und in der Regel schwerwiegende Auswirkungen auf das Geschäft haben, wird empfohlen, dass Unternehmen die Auswirkungen solcher Schwachstellen genau bewerten und dabei empfohlene Verfahren und Scanning-Tools einsetzen.

Testen Sie unseren XSS-Scanner kostenlos

Erhalten Sie jetzt kostenlos einen schnellen Sicherheitsbericht für Ihre Website

Wir analysieren derzeit http://example.com
Wir scannen derzeit http://example.com
Status des Scans: In Bearbeitung
Scan target: http://example.com/laskdlaksd/12lklkasldkasada.a
Datum: 27/05/2022
Crashtest Security Suite prüft auf:
Information disclosure Known vulnerabilities SSL misconfiguration Open ports
Scanauftrag ausfüllen
Bitte geben Sie Ihre Daten ein, um die schnelle Sicherheitsüberprüfung zu erhalten.
Ein Sicherheitsspezialist analysiert gerade Ihren Scan-Bericht.
Bitte geben Sie Ihre Telefon-/Handynummer an, damit wir Ihre Identität überprüfen können:
Ihren Bericht anfordern
Vielen Dank.
Wir haben Ihren Antrag erhalten.
Sobald Ihr Sicherheitsaudit fertig ist, werden wir Sie benachrichtigen.