Cross-Site-Scripting (XSS) Erläuterung und Prävention

Erklärung von XSS als eine der häufigsten Schwachstellen in Webanwendungen

Was ist Cross-Site-Scripting (XSS)?

Cross-Site-Scripting (XSS) ist ein an Webanwendungen gerichteter Sicherheitsangriff über Code-Injektion, die schädliche Client-seitige Skripts an den Webbrowser eines Benutzers zur Ausführung sendet. Die Ziele werden nicht direkt angegriffen, sondern vielmehr schwach geschützte Websites und Webanwendungen zur Durchführung von Cross-Site-Scripting-Angriffen missbraucht, wenn Benutzer auf diesen Websites bzw. in diesen Anwendungen agieren.

Wenn ein ahnungsloser Benutzer beispielsweise eine kompromittierte Website aufruft, wird zu diesem Zeitpunkt das bösartige Skript des Angreifers geladen und im Browser des Benutzers ausgeführt. Dies kann zu Abzug/Diebstahl sensibler Daten, Sitzungs-Hijacking und vielem mehr führen. Da JavaScript von so vielen Webbrowsern und Plattformen unterstützt wird, ist es für XSS-Angreifer zum bevorzugten Mittel geworden, obwohl derartige Angriffe in jeder Sprache geschrieben werden können, die von Browsern unterstützt wird. Obwohl es XSS-Angriffe seit über 15 Jahren gibt, haben sie sich als hocheffektiv erwiesen und werden aktuell immer noch als gängiger und umsetzbarer Angriffsvektor gesehen.

 

Auswirkungen von Cross-Site-Scripting

Wenn eine Webseite mit Cross-Site-Scripting infiziert wird, entstehen schnell eine Reihe von Problemen. Zu den möglichen Problemen zählen unter anderem:

  • Sensitive Benutzerdaten werden offengelegt
  • Angreifer übernehmen Online-Konten und imitieren Benutzer
  • Vandalismus der Content-Präsentation auf der Website
  • Hochladen von bösartigen Trojanern
  • Umleitung von Webseiten auf schädliche Seiten

Cross-Site-Scripting kann für ein Unternehmen sehr schädigend sein, wenn es nicht sofort erkannt und behoben wird. Da Unternehmen und Kunden gleichermaßen von XSS-Angriffen betroffen sein können, leiden potenziell der Ruf und die professionellen Beziehungen unter einer erfolgreichen Injektion von Malware.

Ein bedauerliches Beispiel von Cross-Site-Scripting ereignete sich in der Weihnachtssaison 2018 durch das vermehrte Auftreten der kreditkartenlesenden Malware, die als ‚Magecart‘ bekannt wurde. Die Malware nutzte eine Schwachstelle aus, indem sie sich in Online-Kassen injizierte. Es war das erste Mal, dass ein Angriff dieser Art so großflächig auftrat. Die Kreditkartenangaben von Benutzern wurden aller Wahrscheinlichkeit nach auf einen vom Angreifer kontrollierten Server hochgeladen und verkauft oder zu betrügerischen Zwecken verwendet.

Arten von Cross-Site-Scripting-Angriffen

Cross-Site-Scripting-Angriffe werden in der Regel einer der folgenden Arten zugeordnet.

  • Reflected XSS
  • Persistent XSS
  • Dom-Based XSS

Reflected XSS

Ein reflektierter XSS-Angriff verwendet eine anfällige Website, die die Daten (d. h. ein bösartiges Script) entgegennimmt, die ihr vom Webbrowser der Zielperson zugesandt werden, um dann das Ziel anzugreifen. Da das bösartige Skript vom Client selbst gesendet wird und nicht auf dem anfälligen Server verweilt, wird diese Art des Angriffs auch als „nicht persistent“ (nicht beständig) bezeichnet.

Als einfaches Beispiel eines reflektierten XSS-Angriffs könnte ein Angreifer eine URL erstellen, die ein kleines, bösartiges Skript als Abfrageparameter an eine Website übergibt, die eine für XSS anfällige Suchfunktion verwendet:

            http://anfaellige-website.com/search?search_term=”

Dann muss der Angreifer dafür sorgen, dass Zielpersonen diese URL in ihren Browsern aufrufen. Dies könnte durch den Versand einer E-Mail mit der URL geschehen (inklusive eines plausiblen Grundes, warum der Benutzer diese anklicken soll) oder indem die URL auf einer öffentlichen, nicht anfälligen Website erscheint, wo Benutzer sie anklicken.

Wenn eine Zielperson den Link anklickt, akzeptiert die anfällige Website den Abfrageparameter „search_term“ mit der Erwartung, dass der Wert für die Zielperson von Interesse ist, und sie daher auf anfaellige-website.com danach suchen wird, obwohl der Wert tatsächlich das bösartige Skript enthält. Die Seite mit der Suchfunktion zeigt dann, wie die meisten Suchseiten es tun, wenn ein Benutzer etwas sucht, ein Suchfeld wie „Suche nach...“ an, aber da die anfällige Website nicht den search_term Wert bereinigt hat, wird das bösartige Skript in die Webseite injiziert, die vom Browser der Zielperson geladen wird, und anschließend im Browser ausgeführt.

Persistent XSS

Wie der Name andeutet, wird ein persistenter XSS-Angriff auf dem anfälligen Server selbst gespeichert/gelagert. Im Gegensatz zu einem reflektierten Angriff, bei dem das bösartige Skript vom Ziel gesendet wird, können Benutzer einer anfälligen Website oder einer Web-App in ihren üblichen Interaktionen mit der anfälligen Website/App angegriffen werden.

Ein einfaches Beispiel für einen persistenten XSS-Angriff könnte ein Angreifer sein, der eine Nachricht in einem Forum postet, das auf einer anfälligen Website gehostet wird. Statt des üblichen, unbedenklichen Forumpostings enthält diese Nachricht jedoch das bösartige Skript des Angreifers. Wenn ein Benutzer diesen Forum-Beitrag aufruft, lädt sein Webbrowser das bösartige Skript und führt es aus.

Wie Sie erkennen können, unterscheiden sich reflektierte und persistente XSS-Angriffe vor allem darin, dass persistente XSS-Angriffe in allen Benutzern einer anfälligen Website/App Zielpersonen des Angriffs sehen.

DOM-Based XSS

Eine weitere Art eines XSS-Angriffs ist DOM-based, d. h. die Schwachstelle liegt in den Client-seitigen Skripts, die die Website/App Besuchern immer bereitstellt. Der Angriff unterscheidet sich von reflektierten und persistenten XSS-Angriffen darin, dass die Website/App das bösartige Skript nicht direkt an den Browser der Zielperson sendet. In einem DOM-based XSS-Angriff verfügt die Website/App über anfällige Client-seitige Skripts, die das bösartige Skript an den Browser der Zielperson liefern. Ähnlich wie ein reflektierter Angriff speichert ein DOM-based Angriff das bösartige Skript nicht auf dem anfälligen Server.

In einem einfachen Beispiel eines DOM-based XSS-Angriffs könnte dasselbe Setup wie beim reflektierten XSS-Beispiel oben verwendet werden. Der Angreifer erstellt eine URL mit einem bösartigen Skript als „search_term“ und sendet sie an potenzielle Zielpersonen. Sobald jemand die URL anklickt, lädt der Browser die Suchfunktion der Website und die anfälligen Client-seitigen Verarbeitungsskripts. Obwohl „seach_term“ dem Backend der Website immer noch als Abfrageparameter zur Verarbeitung bereitgestellt wird, generiert die Website selbst nicht die Seite mit dem injizierten bösartigen Skript. Stattdessen sind die anfälligen Client-seitigen Skripts der Website so gestaltet, in der Suchfunktion der Zielperson den Wert des Suchbegriffs (d. h. das bösartige Skript) dynamisch lokal (also im Browser der Zielperson) zu ersetzen, wodurch der Browser der Zielperson das Angriffsskript lädt und ausführt.

DOM-based XSS-Angriffe zeigen auf, dass XSS-Schwachstellen nicht auf serverseitige Software beschränkt sind.

Verhinderung von Cross-Site-Scripting-Angriffen

Angesichts der verschiedenen Varianten von Cross-Site-Scripting-Angriffen müssen Unternehmen wissen, wie sie sich angemessen schützen und zukünftige Probleme verhindern können. Es wird zunehmend schwieriger, Websites streng zu überwachen, was an ihrer steigenden Komplexität liegt. Die Häufigkeit von Angriffen wird in Zukunft wahrscheinlich weiter steigen.

Die folgenden Empfehlungen können dazu beitragen, Ihre Benutzer vor XSS-Angriffen zu schützen:

Bereinigung der Benutzereingabe:

  • Validieren Sie, um potenziell bösartige Benutzereingaben abzufangen.
  • Codieren Sie Ausgaben, um potenziell bösartige Benutzerdaten daran zu hindern, im Browser ein automatisches Laden-und-Ausführen auszulösen.

Schränken Sie die Verwendung von Benutzereingaben weiter ein:

  • Einsatz nur bei Bedarf.

Setzen Sie Sicherheitsrichtlinien für Content ein:

  • Bietet zusätzlichen Schutz und Minderung bei versuchten XSS-Angriffen.

Verwenden Sie regelmäßig ein Tool zum Scannen nach Schwachstellen in Webanwendungen, um XSS-Schwachstellen in Ihrer Software zu identifizieren.

Auch wenn XSS-Angriffe weiterhin ein beliebter (und erfolgreicher) Angriffsvektor sind, ist es sehr sinnvoll, beim Website-Design wohlüberlegt vorzugehen und Tests durchzuführen, um Schwachstellen in Ihrer Website oder Webanwendung zu vermeiden (und Ihre Benutzer zu schützen).  Erfahren Sie mehr über Sicherheitstests für Webanwendungen.