Cross-Site Scripting (XSS) gehört zu den großen Problemen des World Wide Web. Seit der ersten öffentlichen Dokumentation im Jahr 2000 bis heute zählt XSS zu den häufigsten Schwachstellen von Internetseiten. Bei einem XSS-Angriff fügt der Hacker einen HTML- und/oder JavaScript-Code in die Website ein, der dann ausgeführt wird und Schäden anrichten kann. Erfahren Sie mehr über schützende Maßnahmen – und warum viele davon nicht mehr ausreichen.

Die vier verbreiteten Maßnahmen zum Schutz vor XSS

Trotz der Bekanntheit und obwohl Web Developer die Probleme bereits im Source Code adressieren, bleibt die Anzahl unentdeckter XSS-Risiken groß.

Als zweite Verteidigungslinie gibt es daher vier Maßnahmen, die das Ausnutzen von Schwachstellen verhindern sollen:

  1. HTML Sanitizer: Von Web Developern verwendete Bibliotheken wandeln nicht vertrauenswürdiges HTML in sicheres HTML um. Beispiele sind DOMPurify und Google Closure.
  2. Browser-basierte XSS-Filter: Die Filter sind Teil der Browser-Navigation und Anzeige. Die Browser Chrome, Edge und Internet Explorer beinhalten solche Filter, für Firefox ist das NoScript-Addon verfügbar. Die Filter sollen XSS-Attacken entdecken und blockieren.
  3. Web Application Firewalls: Diese Software läuft auf dem Server und soll schädliche Anfragen blockieren. ModSecurity ist ein Beispiel für eine Open-Source Web Applikation Firewall.
  4. Content Security Policy (CSP): Dieses Browser-Feature kann der Web Developer konfigurieren und so angeben, welcher JavaScript-Code zur Applikation gehört und vom Browser ausgeführt wird.

Die meisten dieser Verfahren konzentrieren sich auf Script Tags und Event Handler. Dabei beruhen die Schutzmaßnahmen auf den folgenden drei Strategien:

  1. Anfragen filtern: HTTP-Anfragen werden geblockt, bevor diese die Anwendung erreichen. Filter wie NoScript arbeiten auf der Browser-Ebene, Filter wie Web Application Firewalls (WAFs) auf Netzwerk- oder Applikation-Ebene.
  2. Antwort-Bereinigung (Response sanitization): Erkennt einen schadhaften Code in Antworten und beseitigt diesen. Der HTML Sanitizer ist dafür ein Beispiel.
  3. Code-Filter: Erkennen schadhaftes JavaScript direkt vor der Ausführung. Beispiele sind CSP und der XSS-Filter von Chrome.

Code-reuse-Attacke auf moderne Web-Applikationen via Script Gadgets

Der im Folgenden beschriebene Angriff auf eine Web-Applikation kann die bisher eingesetzten Mittel zur Abwehr von XSS umgehen. Dafür missbraucht der Angreifer sogenannte Script Gadgets zum Ausführen von JavaScript.

Hintergrund: JavaScript, HTML und das DOM

JavaScript wird für die Interaktion mit dem DOM (Document Object Model) verwendet und macht HTML-Seiten interaktiver. Dafür liest JavaScript das DOM im Browser auf unterschiedlichen Wegen aus. Funktionen wie „document.getElementsByClassName“ basieren auf DOM-Selektoren, mit denen sich das DOM nach bestimmten Elementen untersuchen lässt. DOM-Selektoren sind die Grundlage der modernen JavaScript Frameworks, auf Elemente kann per Angabe des Tags, der ID, der Klasse oder des Attributs zugegriffen werden.

Was sind Script Gadgets?

Bei der vorgestellten Angriffsmethode spielen die Script Gadgets die Hauptrolle. Es handelt sich dabei um legitime JavaScript-Fragmente innerhalb des gültigen Anwendungscodes, die durch gültiges HTML Markup ausgeführt werden. Script Gadgets müssen nicht vom Angreifer eingeschmuggelt werden, sie sind bereits im Code des Web Developers oder in verwendeten JavaScript-Bibliotheken enthalten. Meist nutzen diese Gadgets DOM-Selektoren für die Interaktion mit Elementen auf der Webseite. Eine Webanwendung kann beispielsweise einem Element einen Wert zuweisen, der vom DOM stammt:

var button = getElementById(„button-Ok“);

button.innerHTML = button.getAttribute(„data-text“);

Ein Script Gadget ist ein JavaScript-Code, der auf ein spezielles DOM reagiert.

Wie läuft der Angriff ab?

Die existierenden XSS-Abwehrmaßnahmen basieren auf der Annahme, dass die Website direkt mit schadhaftem Code infiziert wird. Beim Gadget-basierten Angriff wird harmlos erscheinendes HTML-Markup in die Website eingefügt. HTML-Inhalte ohne Skripte werden als gültig angesehen und bleiben unberührt. Da der hinzugefügte Code nicht direkt ausführbaren Skript-Code enthält, ignorieren bisher verwendete XSS-Abwehrmaßnahmen diesen. Während der Laufzeit der Webanwendung greifen die Script Gadgets auf den eingefügten Inhalt zu und wandeln diesen unfreiwillig in ausführbaren Code um.

Eigenschaften des schadhaften Codes

Der eingefügte Code des Angreifers erfüllt zwei Kriterien:

  1. Das JavaScript des Hackers ist in nicht ausführbarer Form im gültigen HTML-Code enthalten.
  2. Das HTML ist so gestaltet, dass es im Webdokument ein Script Gadget ansteuert. Das hinzugefügte HTML löst damit eine sogenannte Code-reuse-Attacke aus.

Das Angriffsmuster

Der beschriebene Angriff folgt diesem Muster:

  1. Der Angreifer infiziert das DOM mit Code, der Script Gadgets auslöst. Der Code des Angreifers enthält gültiges HTML-Markup und stimmt mit den DOM-Selektoren der Webanwendung überein.
  2. Der eingefügte Inhalt wird von den Abwehrmaßnahmen untersucht und nicht verändert, da es sich um gültiges HTML-Markup handelt.
  3. Das JavaScript Gadget nimmt unter Verwendung von DOM-Selektoren den eingefügten Code vom DOM und überführt diesen in JavaScript-Befehle.
  4. Das Skript des Angreifers wird ausgeführt, das Ergebnis ist eine Cross-Site-Scripting-Attacke.

Das Script Gadget greift auf den hinzugefügten DOM-Inhalt zu, was die Ausführung der schadhaften Codes zur Folge hat. Das Problem: Diese Script Gadgets sind in fast allen modernen JavaSript Frameworks im Einsatz. Die Forscher gehen daher davon aus, dass sich die meisten Techniken zur Abwehr von Cross-Site Scripting auf Websites mit modernen JavaScript-Bibliotheken umgehen lassen. Die Forscher analysierten die 5.000 Top-Websites und konnten in 19,88 Prozent der Fälle Sicherheitslücken durch Script Gadgets aufspüren.

Lösung des Problems Cross-Site Scripting mit Script Gadgets

Aufgrund der zahlreichen Frameworks und Bibliotheken ist es schwierig, alle Script Gadgets entsprechend zu adressieren. Die HTML-Bereiniger können zum Beispiel die class- oder data-id-Attribute filtern, um die Ausführung von schadhaftem Code zu vermeiden. Auf der anderen Seite können Entwickler der Bibliotheken und Frameworks entsprechende Gadgets beseitigen und die Anwender so besser schützen. Aufgrund der Schwierigkeiten empfehlen die Forscher Techniken zur Isolierung und Vorbeugung. Sie zählen isolierte Skripte, Sandboxed Iframes und Suborigins als vielversprechende Ansätze auf, mit denen sich Sicherheitsexperten mehr beschäftigen sollten.

Hinweis: Die vorgestellte Attacke basiert auf der Arbeit der Google- beziehungsweise SAP-Mitarbeiter Sebastian Lekies, Krzysztof Kotowicz und Samuel Groß. Das vollständige pdf-Dokument können Sie hier herunterladen.

 

Bildnachweis: Pixabay free pictures

Benjamin Schmitz

Benjamin Schmitz ist selbstständiger Systemadministrator und passionierter Webdesigner. Im Host Europe Blog schreibt er über Webanwendungen und gibt Tipps für Einsteiger und Fortgeschrittene.
Benjamin Schmitz

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Die von Ihnen hier erhobenen Daten werden von der Host Europe GmbH zur Veröffentlichung Ihres Beitrags in diesem Blog verarbeitet. Weitere Informationen entnehmen Sie bitte folgendem Link: www.hosteurope.de/AGB/Datenschutzerklaerung/