Was ist Cross-Site-Scripting (XSS): Beispiele und Prävention

Wir leben im Zeitalter des schnellen digitalen Wandels mit innovativen Lösungen, die es uns ermöglichen, eine Vielzahl von Dingen schneller und einfacher zu erledigen. Während die Technologien immer weiter voranschreiten, entwickeln Hacker und Bedrohungsakteure raffinierte Gegenmaßnahmen, indem sie diese futuristischen Technologien ausnutzen.

Obwohl Fachleute für Informationssicherheit ständig an der Entwicklung praktischer Tools für die Cybersicherheit arbeiten, sind Website-Nutzer neuen Schwachstellen ausgesetzt – wobei Cross-Site Scripting (XSS) eine der häufigsten Cyber-Bedrohungen ist.

Was ist Cross-Site Scripting (XSS)?

Cross-Site Scripting (XSS) ist ein Sicherheitsangriff durch Code-Injektion, der es einem Bedrohungsakteur ermöglicht, bösartige Skripte in Webbrowser einzufügen, die zu vertrauenswürdigen Webanwendungen oder Websites gehören. Im Gegensatz zu SQL-Injection und anderen Angriffsvektoren, die direkt auf die Datenbank zugreifen, konzentriert sich XSS auf den Endbenutzer, um die vollständige Kontrolle über die Vorgänge zu erlangen.

Indem er sich als Benutzer ausgibt, kann der Angreifer das aktive Sitzungs-Cookie des Benutzers stehlen und Zugang zu dessen vertraulichen Daten erhalten. Der Browser des Opfers kann legitimes Markup nicht von bösartigem Markup unterscheiden und führt es aus.

XSS steht auf der Liste der 10 kritischsten Schwachstellen von Webanwendungen des OWASP an achter Stelle. Die Ranglisten des Open Web Application Security Project werden von Sicherheitsexperten aus der ganzen Welt erstellt, um Entwicklern zu helfen, Schwachstellen im System abzusichern und das Vorhandensein bekannter Risiken zu verringern.

Was ist Cross-Site-Scripting (XSS): Beispiele und Prävention

Welche Arten von XSS-Angriffen gibt es?

Je nachdem, wo ein Hacker bösartige Eingaben einspeist, kann XSS in drei Hauptkategorien unterteilt werden:

Gespeichertes Cross-Site Scripting

Stored XSS oder Persistent XSS ist die gefährlichste Art von XSS-Angriffen, die viele Besucher gefährden und verheerende Folgen haben kann. Gespeicherte XSS entstehen, wenn die Eingaben des Benutzers nicht validiert werden, bevor der Inhalt gespeichert und auf der Webseite dargestellt wird.

Soziale Netzwerke, Foren, Blogging-Websites, Benutzerprofile, Message Boards und Kommentarabschnitte sind gängige Bereiche, in denen XSS gespeichert werden kann. Bedrohungsakteure nutzen diese Schwachstelle aus, indem sie XSS-Nutzdaten in die meistbesuchten Webseiten einspeisen. Wenn das Opfer auf den manipulierten Link klickt und die virale Seite öffnet, führt der Webbrowser des Opfers die Nutzlast client-seitig aus.

Nachfolgend finden Sie ein anschauliches Beispiel für eine gespeicherte XSS-Schwachstelle. Ein Benutzer kann Nachrichten an eine Message-Board-Anwendung senden, die andere Benutzer sehen können:

<p>Hello, this is my message!</p>

Die Anwendung verarbeitet die Daten nicht weiter, was es einem Betrüger leicht macht, eine Nachricht zu versenden, die auf andere Nutzer abzielt:

<p><script>/* Bad stuff here... */</script></p>

Reflektiertes Cross-Site Scripting

Reflected XSS ist der am häufigsten eingesetzte Cross-Site-Scripting-Angriff (auch bekannt als nicht-persistentes XSS). Bei diesem Angriff fügt ein Hacker bösartigen Code an das Ende der URL an. Sobald der Benutzer auf diesen Link in seinem Webbrowser klickt, führt der Browser die reflektierte XSS-Nutzlast aus.

Der Bedrohungsakteur verwendet in der Regel bösartige URLs, Phishing-E-Mails und andere digitale Social-Engineering-Angriffe, um das Opfer zum Klicken auf den Link zu verleiten. In der Regel werden die folgenden XSS-Angriffe über soziale Netzwerke durchgeführt.

Zur Veranschaulichung einer XSS-Schwachstelle sehen Sie sich das folgende Beispiel an:

https://insecure-website.com/status?message=All+is+well.
<p>Status: All is well.</p>

Die Webanwendung führt keine weitere Datenverarbeitung durch, so dass ein Hacker den folgenden Angriff durchführen kann:

https://insecure-website.com/status?message=
<p>Status: <script>/* Bad stuff here... */</script></p>

DOM-basiertes Cross-Site Scripting

Die Täter können bösartigen Code in eine Seite einfügen, indem sie die DOM-Umgebung (Document Object Model) verändern, wenn diese die Benutzereingaben nicht richtig filtert. Der HTML-Quellcode und die Antwort des Angriffs sind bei DOM-basiertem XSS identisch. Die Seite selbst bleibt gleich, aber aufgrund der böswilligen Änderungen an der DOM-Umgebung wird der clientseitige Code auf der Seite unerwartet ausgeführt.

Bei DOM-basiertem XSS handelt es sich ausschließlich um eine clientseitige Injektionsschwachstelle. Daher erreicht die schädliche Nutzlast niemals den Server. Aufgrund der einzigartigen Natur von DOM-basiertem XSS ist es für Web Application Firewalls (WAFs) und andere Sicherheitstools für Webanwendungen schwierig, die Angriffe zu erkennen.

Die Webanwendung im folgenden Beispiel verwendet JavaScript, um den Wert aus einem Eingabefeld zu lesen und diesen Wert in ein HTML-Element zu schreiben:

var search = document.getElementById('search').value;
var results = document.getElementById('results');
results.innerHTML = 'You searched for: ' + search;

Wenn der Bedrohungsakteur die Kontrolle über den Wert des Eingabefelds hat, kann er leicht einen bösartigen Wert erstellen, der sein Skript zu einem unsicheren Verhalten veranlasst:

You searched for: <img src=1 onerror='/* Bad stuff here... */'>

Wie können Bedrohungsakteure XSS ausnutzen?

Der bösartige Inhalt, der an den Webbrowser gesendet wird, hat in der Regel die Form eines JavaScript-Segments, kann aber auch HTML, Flash, VBScript, ActiveX oder jeden anderen Code enthalten, den der Browser ausführen kann.

JavaScript-basierte XSS-Angriffe sind am weitesten verbreitet, da JavaScript eine grundlegende Komponente der meisten Browsererfahrungen ist.

JavaScript kann Cookies im Browser auslesen, was es dem Täter ermöglicht, einen XSS-Angriff auszuführen und sich als Benutzer auszugeben, um Identitätsdiebstahl und andere schändliche Aktivitäten zu begehen. JavaScript bietet mehrere Module und Methoden für HTTP-Anfragen, mit denen Daten (z. B. gestohlene Cookies) an den Angreifer zurückgesendet werden können. Darüber hinaus kann die Anfälligkeit von JavaScript auf der Client-Seite dazu beitragen, dass Betrüger Zugang zu APIs erhalten und auf einfache Weise den geografischen Standort, Webcam-Daten und andere private Informationen von Kunden kompromittieren.

Durch Ausnutzung von XSS-Schwachstellen kann ein Bedrohungsakteur bösartige Aktivitäten durchführen, wie z. B.:

  • Entführung der Sitzung des Benutzers. Session Hijacking ist eine Methode, um die authentifizierte Sitzung eines Benutzers zu übernehmen. Sitzungscookies enthalten wichtige Daten, die es einem Bedrohungsakteur ermöglichen, sich als legitimer Benutzer auszugeben und die Sitzungs-ID zu erlangen, wenn er kompromittiert wird.
  • Unbefugte Aktionen durchführen. Angreifer können die Cookies nicht über JavaScript stehlen, wenn das Cookie-Attribut HTTPOnly gesetzt ist. Mit einem XSS-Angriff können sie aber dennoch unberechtigte Aktivitäten innerhalb der Anwendung im Namen des Opfers durchführen.
  • Phishing-Angriffe durchführen. Phishing ist eine häufige Art von Cyberangriff, bei dem der Täter ein Formular in die anfällige Seite einfügt und dieses veränderte Formular verwendet, um die Anmeldeinformationen des Benutzers zu stehlen, in der Regel in Form von Kennwörtern, Bankkontoinformationen und Kreditkartennummern.
  • Erfassen der Tastenanschläge der Benutzer. In diesem Fall fügt ein Hacker einen JavaScript-Keylogger in die anfällige Seite ein und überwacht die Tastenanschläge des Opfers auf der aktuellen Webseite. Die gesammelten Informationen können Benutzernamen, Kennwörter und potenziell kompromittierende Daten offenlegen, die Hacker zu ihrem finanziellen Vorteil nutzen können.
  • Stehlen sensibler Informationen. Durch die Durchführung eines XSS-Angriffs sammelt ein Täter Daten aus der aktuellen Sitzung des Benutzers. Beispielsweise können Angreifer durch Cross-Site-Scripting-Angriffe auf Online-Banking-Anwendungen den aktuellen Kontostand, Transaktionsdetails, persönliche Informationen usw. einsehen.

XSS-Schwachstellen begünstigen die Eskalation von Angriffen auf eine ernstere Ebene und können, wenn sie von Betrügern missbraucht werden, schweren Schaden anrichten. XSS-Angriffe können zur Preisgabe sensibler Daten, zur Kompromittierung des Kontos des Opfers und zu Schlimmerem führen.

Indem sie ein gefälschtes Formular erstellen, verleiten die Angreifer die Internetnutzer dazu, ihre Anmeldedaten einzugeben, wodurch sie alle Informationen über den Nutzer erhalten können. Ist die Absicht der Hacker, ihre Opfer zu täuschen, erst einmal erfüllt, können die erlangten Daten für Identitätsdiebstahl oder Finanzbetrug verwendet werden.

XSS-Beispiele aus der Praxis

Die Cross-Site-Scripting-Angriffe haben namhafte Unternehmen in Mitleidenschaft gezogen. Im Folgenden werden die bekanntesten Beispiele genannt:

Fortnite

Fortnite ist ein Spielephänomen – eines der beliebtesten Online-Kampfspiele mit mehr als 200 Millionen Spielern weltweit. Aufgrund seiner großen Beliebtheit wurde die Spielplattform zum Hauptziel für böswillige Akteure und könnte Anfang 2019 von einem XSS-Angriff betroffen sein, der zu einem Datenleck führt.

Sicherheitsforscher von Check Point Software Technologies haben die Cross-Site-Scripting-Schwachstelle im Spiel entdeckt, die es Hackern ermöglichen könnte, die Konten von Spielern zu übernehmen, auf ihre sensiblen Daten zuzugreifen, virtuelle Währung im Spiel zu stehlen und ihre Gespräche zu belauschen. Die Experten haben den Spieleentwickler Epic Games privat über die festgestellten XSS-Schwachstellen informiert, und das Unternehmen hat die Probleme behoben.

British Airways

Im Jahr 2018 wurde British Airways mit einer Datenpanne konfrontiert, die 380.000 Buchungstransaktionen betraf. Den RiskIQ-Forschern gelang es, Magecart zu erwischen – eine der größten Hackergruppen, die für den Einsatz von Online-Skimming-Techniken berüchtigt ist. Die Hacker griffen die Website von British Airways an, indem sie eine XSS-Schwachstelle in einer JavaScript-Bibliothek namens Feedify ausnutzten.

Nachdem sie das Skript geändert hatten, schickten die Täter Kundendaten an einen von ihnen bestimmten Server mit einem Domainnamen, der dem von British Airways ähnelte, und konnten so erfolgreich Kreditkartenabbuchungen vornehmen. Der bösartige Server verfügte über ein SSL-Zertifikat, so dass die Kunden dem Server, bei dem sie einkauften, vollkommen vertrauten.

eBay

eBay ist eine der ältesten und beliebtesten E-Commerce-Plattformen. Allerdings wurde sie Ende 2014 und Anfang 2015 durch eine Cross-Site-Scripting-Schwachstelle kompromittiert. Die Website verwendete einen URL-Parameter, der eBay-Mitglieder auf verschiedene Seiten weiterleitete, aber der Wert des Parameters wurde nicht überprüft, bevor er in die Seite aufgenommen wurde. Aufgrund dieser Schwachstelle konnten die Angreifer eine URL erstellen, die einen parasitären iFrame enthielt, und diesen in die legitime eBay-Website einschleusen.

Auf diese Weise konnten die Betrüger auf eBay-Verkäuferkonten zugreifen, Zahlungsdaten stehlen, Produkte mit Preisnachlässen verkaufen und eBay-Angebote für wertvolle Produkte wie Fahrzeuge manipulieren. Obwohl eBay das Problem anschließend behoben hat, kam es bis 2017 immer wieder zu Angriffen.

Facebook

Im Jahr 2011 wurden innerhalb von 10 Tagen drei verschiedene XSS-Schwachstellen auf Facebook-Seiten entdeckt. Mindestens zwei wurden genutzt, um virale Links und Angriffe auf Facebook-Nutzer zu verbreiten, um auf Informationen in ihren Konten zuzugreifen oder diese zu ändern.

Aufgrund einer unzureichenden JavaScript-Filterung trat das erste Problem auf einer Seite der mobilen API-Version von Facebook auf. Die Schnittstelle forderte die Nutzer auf, eine beliebige Nachricht auf ihren Pinnwänden zu posten. Darüber hinaus wurde eine zweite XSS-Schwachstelle entwickelt, die HTML innerhalb einer viralen Seite nutzte, um Malware über die Website zu verbreiten. Mehrere Links verbreiteten schnell Fishing-Angriffe, was die Aufmerksamkeit der Sicherheitsforscher erregte, und Facebook gelang es, die XSS-Schwachstelle erfolgreich zu beheben.

Das letzte XSS-Problem, das bekannt wurde, betraf eine Facebook-“Channel”-Seite für die Sitzungsverwaltung, bei der ein Code-Update das Verhalten der Seite fälschlicherweise änderte. Nachdem Sicherheitsexperten die Schwachstelle bemerkt hatten, wurde sie von Facebook sofort behoben.

Erkennung von Cross-Site-Scripting-Schwachstellen

Die Gründe für das Auftreten von XSS-Schwachstellen sind:

  • Die Eingabe wird nicht validiert.
  • Die Ausgabe an den Browser wird nicht in HTML-Zeicheneinheiten umgewandelt.

Im Allgemeinen werden Web-Scan-Tools verwendet, um nach Sicherheitslücken in Webanwendungen zu suchen. Diese automatisierten Tools injizieren bösartige Skripte in die Webanwendung, z. B. GET- oder POST-Variablen, URLs, Cookies und anderen Code, mit dem XSS-Angriffe durchgeführt werden könnten. Gelingt es dem Tool, das Skript in die Webseite einzuschleusen, so ist die Website einem XSS-Angriff ausgesetzt. Nach der Entdeckung von Malware-Angriffsvektoren benachrichtigt das Tool den Benutzer über die entdeckte Sicherheitslücke.

XSS-Prävention und -Abwehr

Cross-Site Scripting (XSS) kann eine ernsthafte Bedrohung für einzelne Benutzer und Unternehmen darstellen, deren Websites infiziert sein könnten. In manchen Fällen ist es schwierig, den Angriff abzuwehren. Aus diesem Grund müssen Sie alle nicht vertrauenswürdigen Daten gründlich bereinigen, um sich vor XSS zu schützen. Um das Risiko für Ihre Webanwendung zu verringern, sollten Sie niemals zulassen, dass Ihr Browser als Eingabe empfangene Daten verarbeitet, ohne sie zu validieren.

Spezifische Präventionsmethoden variieren je nach Untertyp der XSS-Schwachstelle und dem Kontext der Benutzereingabe. Es sollten jedoch bestimmte allgemeine Maßnahmen ergriffen werden, um Ihre Benutzer vor XSS-Angriffen zu schützen und Ihre Webanwendung sicher zu halten:

Validierung

Hier wird sichergestellt, dass die Eingaben für die Verarbeitung im Code sicher sind und dass fehlerhafte Daten die Website, die Datenbank und die Benutzer nicht beschädigen. Durch die Ablehnung von Anfragen von externen Parteien oder Quellen verhindert die Eingabevalidierung, dass Benutzer Sonderzeichen in Dateneingabefelder auf den Websites eingeben. Die Eingabevalidierung verhindert Injektionsangriffe, Datenlecks und gefährdete Systeme.

Kodierung

Kodierung ist ein wesentlicher Bestandteil der XSS-Abwehr. An dem Punkt, an dem vom Benutzer kontrollierbare Daten in HTTP-Antworten ausgegeben werden, kodieren Sie die Ausgabe so, dass der Browser sie nur als Daten und nicht als ausführbaren Code interpretiert. Je nach Ausgabekontext können verschiedene Kodierungsmethoden erforderlich sein, da die Browser JavaScript, JS, URL, HTML und CSS unterschiedlich analysieren.

HttpOnly-Flags setzen

Die folgende Vorsichtsmaßnahme hilft, XSS-Angriffe zu entschärfen. Wenn diese zusätzliche Markierung in den HTTP-Antwort-Header aufgenommen wird, kann auf das Cookie mit den vertraulichen Informationen des Benutzers nicht über das Client-Skript zugegriffen werden. Verwenden Sie das HttpOnly-Attribut, um JavaScript davon abzuhalten, den sensiblen Inhalt des Cookies zu lesen, was es einem Hacker erschwert, die Sitzung zu kapern und das Konto zu übernehmen.

Sicherheitspolitik für Inhalte

Die Content Security Policy (CSP) ist eine zusätzliche Sicherheitsebene, die den Schweregrad möglicher XSS-Schwachstellen verringern soll. Dieses Browser-Sicherheitstool hilft, XSS und andere clientseitige Angriffe abzuwehren und zu entschärfen.

Regelmäßiges Scannen

Sie sollten einen robusten Web-Schwachstellen-Scanner auf Ihren Webservern einsetzen, um zu verhindern, dass bösartige Inhalte von unbedarften Benutzern oder Besuchern ausgeführt werden. Pentester und Sicherheitsexperten verwenden regelmäßig XSS-Scan-Tools für die Analyse von Webanwendungen.

Penetrationstests

Penetrationstests sind eine Technik der Cybersicherheit, bei der die Hackerperspektive genutzt wird, um Schwachstellen in Systemen aufzuspüren und Cybersicherheitsrisiken zu mindern, so dass Unternehmen die ermittelten Lücken schließen können, bevor böswillige Hacker sie finden.

Das Scannen von Schwachstellen ist kein Ersatz für Penetrationstests. Pentester imitieren die Vorgehensweise realer Bedrohungsakteure und konzentrieren sich auf Sicherheitsschwachstellen, die nicht automatisch erkannt werden können.

Das QAwerk-Team besteht aus professionellen Pentestern, die die fortschrittlichen Tools zur Durchführung gründlicher Sicherheitsaudits und Schwachstellenanalysen beherrschen.

Wie kann man XSS-Fehler effektiv beheben?

Sie können verschiedene Maßnahmen ergreifen, um Ihre Website zu reparieren, wenn Cross-Site Scripting auftritt:

  • Finden Sie anfälligen Code. In der Anfangsphase der Wiederherstellung von Cross-Site Scripting ist der Ort der Schwachstelle zu ermitteln.
  • Löschen Sie bösartige Inhalte und Hintertüren. Sobald Sie wissen, wo sich die Malware befindet, können Sie alle bösartigen Inhalte oder falschen Daten aus Ihrer Datenbank entfernen und mit einem robusten Tool zur Entfernung von Website-Malware einen sauberen Zustand wiederherstellen. Außerdem müssen Sie den Rest Ihrer Website und die Dateisysteme auf Hintertüren überprüfen, um vorhandene Fehler zu beheben und den Ruf Ihrer Website zu wahren.
  • Schließen Sie die Sicherheitslücke. Angreifer nutzen häufig Schwachstellen in Datenbanken, Anwendungen und Komponenten von Drittanbietern aus. Wenn sie ein echtes Risiko darstellen, müssen sie gepatcht werden. Sobald Sie die anfällige Software identifiziert haben, verteilen Sie Updates für den anfälligen Code und wenden Sie diese an, um erkannte Schwachstellen zu beseitigen.
  • Ändern Sie Ihre Anmeldedaten. Im Falle von XSS ist es wichtig, dass Sie Ihre Passwörter und Anwendungsgeheimnisse sofort mit einer strengen Passwortrichtlinie zurücksetzen, sobald die Schwachstelle gepatcht ist. Stellen Sie sicher, dass sich keine Hintertüren oder abtrünnige Verwaltungsbenutzer in der Datenbank befinden, indem Sie Ihre Daten bereinigen, um eine erneute Infektion zu verhindern.
  • Richten Sie eine WAF ein. Eine Schlüsselkomponente Ihrer Sicherheitsstrategie ist die Einrichtung einer leistungsstarken Web Application Firewall (WAF), die speziell gegen XSS vorgeht, indem sie böswillige Serveranfragen an Ihre Website blockiert, die darauf abzielen, sensible Daten auszuspionieren. Mit einer geeigneten WAF können Sie sich vor potenziellen Bedrohungen schützen, bevor Patches zur Verfügung stehen.

Fazit

Cross-Site-Scripting-Angriffe nutzen Sicherheitslücken im Internet aus, indem sie es einem Bedrohungsakteur ermöglichen, clientseitige Sicherheitsmechanismen zu umgehen und bösartigen JavaScript-Code in ansonsten harmlose Websites einzuschleusen. Je nach den Funktionen und Daten, die von der anfälligen Anwendung verarbeitet werden, können XSS-Schwachstellen eine erhebliche Bedrohung für Unternehmen darstellen. Indem sie sich mit einer verlockenden Anfrage als seriöse Quelle ausgeben, können sich Hacker als Benutzerkonten ausgeben, das Verhalten der Benutzer beobachten, externe Inhalte laden und die gesamten Websitzungen der Opfer übernehmen.

Daher ist es wichtig, die Schwachstellen in Ihrem System zu erkennen und Präventivmaßnahmen zu ergreifen, bevor ein XSS-Angriff die Website und ihre Besucher ernsthaft schädigt. Solange die Variablen in einer Webanwendung keinen Validierungsprozess durchlaufen, stellen sie eine potenzielle Schwachstelle dar. Die wirksamsten Schutzmaßnahmen zur Abwehr von XSS-Angriffen sind: Datenbereinigung, Cookie-Schutz, Entfernen von HTML-Tags aus Zeichenketten, Schwachstellen-Scans und regelmäßige Penetrationstests durch Fachleute.