Cross-Site-Scripting: Datenklau über Bande

Seite 2: Über Bande

Inhaltsverzeichnis

Der Trick des Angreifers besteht darin, dem Browser vorzugaukeln, das JavaScript stamme von einer vertrauenswürdigen Seite. Auf einem beliebigen Webserver oder in einem HTML-Dokument hat er einen Hyperlink mit JavaScript eingebettet. Der Link zeigt auf einen Server, von dem der Angreifer annimmt, dass ein Opfer diesen zu den Vertrauenswürdigen zählt, zum Beispiel eine Bank. Zusätzlich weiß der Angreifer, dass dieser Server eine XSS-Schwäche hat. Klickt das Opfer den Link an, wird es zu der Seite geleitet und das JavaScript wird ohne Rückfrage im Browser ausgeführt.

Ein Klick auf einen vertrauten Hyperlink führt zur vermeintlich sicheren Webseite

Normalerweise darf JavaScript nur Cookies auf der Festplatte des Benutzers anfassen, vorausgesetzt das Skript stammt vom gleichen Server (Origin) wie der Cookie. Cookies können Sitzungsnummern (Session-ID) oder Authentifizierungsdaten enthalten und werden von Webservern auf dem Client abgelegt und abgefragt. Viele Webseiten und Internetshops verwenden Cookies, zum Beispiel Amazon und eBay. Mit Cross-Site-Scripting ist ein Angreifer in der Lage, Cookies einzusehen, zu manipulieren oder zu löschen.

Der Griff in die Keksdose erscheint auf den ersten Blick harmlos, ist es aber nicht. Um eine Verbindung zwischen Webserver und Client nach einer erfolgreichen Authentifizierung zu kennzeichnen, verwendet man Session-IDs, die man anderem in Cookies ablegt. Schafft es ein Angreifer solch ein Cookie zu stehlen, kann er die ID extrahieren und eine gültige Verbindung mit dem Server aufbauen, ohne sich mit Name und Passwort anmelden zu müssen. Allerdings muss die ID gültig sein, das heißt der Angriff muss im gleichen Zeitraum erfolgen, in dem das Opfer angemeldet ist. Nach der Abmeldung ist die Session-ID ungültig. David Endler, Sicherheitsexperte bei iDefense, zeigt in [2] wie man Benutzerdaten aus Cookies ausliest, die man über automatisierte XSS-Attacken [1] gestohlen, beziehungsweise kopiert hat. Die dort aufgeführten Beispielskripte verschicken in URLs eingebettetes JavaScript per HTML-Mails und sammeln gestohlene Cookies ein.

Folgender Link demonstriert eine XSS-Schwäche der Suchmaschine Overture: XSS-Demo. [Update]: Mittlerweile hat Overture seine Such-Applikation gefixt; der übergebene JavaScript-Code wird nur noch dargestellt und nicht mehr ausgeführt.[/Update]

Overture filtert in der URL übergebene Argumente nicht richtig aus. Das eingebettete JavaScript sieht folgendermaßen aus:

<script>
alert("Achtung XSS Attacke http://www.heisec.de");
</script>
<SCRIPT>alert(document.domain);</SCRIPT>
<SCRIPT>alert(document.cookie);</SCRIPT>
<iframe src="http://www.heisec.de">

Sonderzeichen wie <>"; müssen dabei mit Escape-Sequenzen dargestellt werden. Wie das dann aussieht, können Sie in der URL der neuen Seite bewundern. Das Skript öffnet hintereinander drei Fenster, die eine Warnmeldung, die Herkunft der HTML-Seite und das zugehörige Cookie anzeigen. Darüberhinaus wird in einem Frame die Startseite von heise Security angezeigt. Das Einschleusen von beliebigen HTML-Code in angezeigte Dokumente nennt man HTML-Injection.