Cross Site Scripting - Überblick, Definition und Fallbeispiele


Was ist Cross Site Scripting?

Cross Site Scripting (XSS) ist eine Art client-seitiger Injektion-Angriff, bei dem ein bösartiges Skript in eine legitime Website injiziert und dort ausgeführt wird. Ein Angriff beginnt, wenn der Benutzer die Website mit dem bösartigen Code besucht. Dieser Blogpost soll eine XSS-Definition darlegen und aufzeigen, dass eine XSS-Schwachstelle ein hohes Risiko für die IT-Organisation darstellt, wie auch die OWASP Top Ten und das Common Vulnerability Scoring System (CVSS) beschreiben.

Intention vom Penetration Tester

XSS-Schwachstellen werden immer öfter im Rahmen eines Penetrationstests in Single-Page-Webanwendungen (SPA) gefunden, da dort viel Business Logik in Form von Java Script (JS) in das Front End verlegt wird. XSS-Vulnerabilities sind wahrscheinlich die heutzutage am weitesten verbreitete Schwachstelle für Webanwendungen mit hohem Risiko, wie unsere Pentester immer wieder feststellen dürfen. Selbst in API Calls werden öfter diese Angriffsvektoren gefunden. Uns ist es wichtig, dass alle IT-Stakeholder verstehen, dass diese Art von Schwachstelle zurecht mit einer hohen Kritikalität bewertet wird und nicht vernachlässigt werden sollte.

Arten von Cross Site Scripting

Reflektiertes Cross Site Scripting

Reflektierte XSS-Angriffe, auch als nicht-persistente Angriffe bekannt, treten auf, wenn ein bösartiges Skript von einer Web-Anwendung in den Browser des Opfers injiziert wird. Das Skript wird über einen Link aktiviert, der eine Anfrage an eine Website mit einer XSS-Schwachstelle sendet, die die Ausführung von bösartigen Skripten ermöglicht. In diesen Payload kann beliebiger Java Script Code ausgeführt werde

Persistentes oder Stored Cross Site Scripting

Persistentes XSS, auch bekannt als stored XSS, ist die gefährlichere Schwachstelle. Es tritt auf, wenn ein bösartiges Skript direkt in eine anfällige Webanwendung injiziert wird. Somit wird der Schadcode immer ausgeführt, wenn das Opfer die Webseite benutzt und funktioniert ohne Benutzerinteraktion.

Lokales Cross Site Scripting (DOM-basiert)

DOM-basiertes XSS bedeutet, dass eine Cross-Site-Scripting-Schwachstelle im DOM (Document Object Model) injiziert wird und nicht in einem Teil des HTML erscheint. Bei reflektierenden und gespeicherten Cross-Site-Scripting-Angriffen können Sie die Nutzlast der Schwachstelle auf der Antwortseite sehen, aber bei DOM-basierten Cross-Site-Scripting sind der HTML-Quellcode und die Antwort des Angriffs exakt gleich, d.h. die Nutzlast kann nicht in der Server-Antwort gefunden werden. Sie kann nur zur Laufzeit oder durch Untersuchung des DOM der Seite beobachtet werden. Im Gegensatz zu den oben genannten gängigen XSS-Varianten ist hier die Webapplikation auf dem Server gar nicht beteiligt.

Fallbeispiele mit einem XSS-Angriffsvektor

Mit diesen Schwachstellen können folgende praktische Angriffsszenarien abgebildet werden, um das tatsächliche Risiko von Cross-Site-Scripting-Schwachstellen nachzuweisen. Diese Vektoren befinden sich nicht in einem vertretbaren Business Risk und müssen nach der Erkennung durch einen XSS-Pentest schnell ausgemerzt werden.

Mit bösartigem JavaScript im Browser des Opfers können folgende Angriffe realisiert werden:

  • Session Hijacking - Auf HTTP-Cookies kann über JavaScript zugegriffen werden, somit können ganze Sessions übernommen und somit ggf. Daten manipuliert werden.
  • Ad-Jacking - Hier wird ohne die Einverständniserklärung die Werbung des Angreifers geschaltet, um Geld zu verdienen.
  • Clickjacking - Sie können eine versteckte Überlagerung auf einer Seite erstellen, um Klicks des Opfers für böswillige Aktionen, wie z.B eine Bestellung, auf noch weiteren Domains auszuführen.
  • Content Spoofing - JavaScript hat vollen Zugriff auf den clientseitigen Code einer Website und kann daher jeden gewünschten Inhalt anzeigen und auch ändern.
  • Credential Harvesting - Es kann ein Popup verwendet, um Anmeldeinformationen zu bestimmter Dienste zu sammeln.
  • Forced Downloads - Es ist einfacher von einer vermeintlich vertrauenswürdigen Website einen Download von schädlicher Malware zu erzwingen.
  • Crypto Mining - Die CPU des Opfers kann verwendet werden, um Rechenleistung zu missbrauchen.
  • CSRF Protection umgehen - Es können Cross-Site-Request-Forgery(CSRF)-Token mit JavaScript gesammelt werden, um falsche POST-Anfragen zu senden.
  • Keylogger - Tastatur-Mitschnitte der jeweiligen Browserinstanz können gelesen werden.
  • Audio und Webcam aufnehmen - Es erfordert eine Autorisierung des Benutzers, aber danach kann auf das Mikrofon- und/oder Webcam des Opfers zugegriffen werden. Alles möglich mit HTML5 und JavaScript.
  • Geo-Standort abrufen - Nach einer Autorisierung des Benutzers kann auf den Geo-Standort des Opfers zugreifen. Funktioniert nur, wenn GPS aktiviert ist.
  • Data Exfiltration von HTML5-Webspeicher - HTML5 hat eine neue Funktion eingeführt, den. Jetzt kann eine Website Daten zur späteren Verwendung im Browser speichern, und natürlich kann JavaScript auf diesen Speicher zugreifen
  • Fingerprinting - Mit JavaScript ist es ein Kinderspiel, den Namen, die Version, die installierten Plugins und deren Versionen, das Betriebssystem, die Architektur, die Systemzeit, die Sprache und die Bildschirmauflösung des Browsers zu finden.
  • Network Scanning - Der Browser des Opfers kann zum Scannen von Ports und Hosts mit JavaScript missbraucht werden.
  • Denial of Service (DoS) - Der Browser des Opfers kann unwissentlich an der DDoS-Angriff auf ein weiteres Ziel teilnehmen.
  • Browser absturz erzwingen - Der infizierte Browser kann zum Absturz gebracht werden.
  • Weiterleitung - Es kann eine Umleitung auf jede Website stattfinden.
  • Tabnabbing - Nur eine ausgefallene Version der Umleitung! Wenn beispielsweise länger als eine Minute keine Tastatur- oder Maus-Ereignisse empfangen wurden, kann dies bedeuten, dass der Benutzer nicht am Computer ist und die aktuelle Webseite durch eine gefälschte ersetzt werden kann.
  • Capturing Screenshots - Dank HTML5 können jetzt Screenshots einer Webseite erstellt werden und anschließend dem Angreifer zur Verfügung gestellt werden.

XSS Penetration Testing Showcase mit BeEF

BeEF ist die Abkürzung für The Browser Exploitation Framework. Es ist ein Werkzeug für Penetrationstests, das sich auf die Ausführung von Schadcode im Webbrowser konzentriert, jedoch nicht für die XSS-Erkennung zuständig ist.

Angesichts der wachsenden Besorgnis über webbasierte Angriffe auf Clients, einschließlich mobiler Clients, ermöglicht es BeEF dem professionellen Pentester, die tatsächliche Sicherheitslage einer Zielumgebung anhand von Angriffsvektoren auf der Client-Seite zu beurteilen. Im Gegensatz zu anderen Frameworks blickt BeEF über den gehärteten Netzwerkrand und das Client-System hinaus und untersucht die Ausnutzbarkeit im Kontext des Webbrowsers. BeEF verbindet einen oder mehrere Web-Browser und nutzt sie als Brückenkopf, um aus dem Kontext des Browsers heraus gezielte Befehlsmodule und weitere Angriffe auf das System zu starten. Dieses Tool findet neben einem Pentest auch beim Red Teaming große Anwendung und wird dort für das Network Lateral Movement benutzt.

Im folgenden wird das Tool bei einer Angriffssimulation vorgestellt:

https://www.youtube.com/watch?v=BzepbzdIoGc

Fazit für XSS-Angriffe

Schwachstellen dieser Art haben kein akzeptierbares Risiko, sind nicht mit einem normalen Business Risk vereinbar und sollten dringend nach dem Pentest-Ergebnis gefixt werden. Eine konsequente IT-Sicherheit für die Webdienste kann mit regelmäßigen Pentests erfolgen, da XSS-Angriffe zu den kritischen Angriffsmöglichkeiten eines jeden Cyberkriminellen gehören. Sensible Daten, wie Browser-Sessions, können erbeutet werden oder komplexe Social-Engineering-Angriffe können hier ihren Startpunkt finden, um weitere Angriffe in die tiefergehende IT-Infrastruktur auszuführen. Jeder Input-Parameter muss gründlich geprüft werden, um eine hohe und vertretbare Web-Anwendungssicherheit zu erlangen!

Neugierig? Überzeugt? Interessiert?

Vereinbaren Sie ein unverbindliches Erstgespräch mit einem unserer Vertriebsmitarbeiter. Nutzen Sie den folgenden Link um einen Termin auszuwählen:

 Termin vereinbaren

Loading...