Reflected XSS bei heise.de

Thumbnail

In diesem Beitrag geht es um Cross-Site-Scripting und mein Lieblingsmedium im Technikbereich heise.de! Ich habe nämlich passenderweise vor ca. einer Woche eine reflected Cross-Site-Scripting (oder auch kurz XSS) Lücke bei heise.de entdeckt und darf diese mit Erlaubnis auf meinem Blog vorstellen.

Was ist Cross-Site-Scripting?

Als Cross-Site-Scripting, oder eben als XSS-Lücke, bezeichnet man Sicherheitslücken in Webanwendungen, die Usereingaben in einem Formular oder ähnliches nicht richtig filtern. Die übergebenen Daten werden ungefiltert und damit unsicher wieder dargestellt und bei korrekter Anwendung eines Schadcodes kann dort zum Beispiel HTML, JavaScript oder sonstiges ausgeführt werden.

Grundsätzlich unterscheidet man zwischen 3 Arten von Cross-Site-Scripting. Reflected, persistent und DOM based. In diesem Artikel stelle ich dir jetzt eine echte reflected XSS-Lücke vor. Diese Lücke tritt nur auf, wenn in einem HTTP-Request Schadcode ungefiltert dargestellt wird.

Ich erkläre das kurz anhand eines Beispiels. Wenn also der Übergabeparameter text normalerweise nur deinen übermittelten Text übergibt, du dort aber einen HTML Code ausgeben lässt und diesen Parameter dementsprechend abänderst, wird der Code implementiert und auch dementsprechend ausgeben.

Aus der URL sichereseite.de/schadcode.php?text=SichererText wird sichereseite.de/schadcode.php?text=<h1>XSS</h1>! Und schon wird auf unserer Seite eine Überschrift mit dem Text „XSS“ dargestellt, die unser Webseitenbetreiber selber nicht dort haben wollte. Kommen wir nun zur Praxis.

Praxisbeispiel – heise.de

Ich bin fleißiger Leser des heise.de Redaktionsteams und habe einfach mal aus Spaß ein bisschen rumgewerkelt, als ich das heise Plus Abonnement abgeschlossen habe und hatte dort bereits nach ca. 10 Minuten Erfolg. Mir gelang es über einen ungesicherten Parameter (plenigo-affiliate-id) HTML und JavaScript einzuschleusen und diesen auch ausgeben zu lassen.

XSS Heise Überschrift

Ich habe auf der linken Seite nun 3 anschauliche Bilder für dich, um zu demonstrieren, was zum Beispiel alles möglich ist. Dies ist allerdings nur eine kleine Auswahl, sollte dir aber einen guten Einblick geben.

Als Erstes habe ich eine simple Überschrift und einen Beispieltext ausgeführt, was zu den Grundsätzen gehört, mit denen ich zuerst gucke, ob ein Parameter oder die Eingabe generell überhaupt gefiltert wird.

xss heise cookies

In meinem 2. Beispiel bin ich etwas weitergegangen, da ich Probleme hatte normales Javascript auszuführen. Also habe ich etwas weiter gedacht und wollte das Gleiche über einen Trick ausgeben lassen. Dies habe ich über einen kaputten Link geschafft.

Dieser Link hat eine absichtlich falsche Syntax. Mit dem JavaScript Event onmouseover habe ich dann eine einfache Implementierung von JavaScript erreicht, was mir mit dem normalen <script> Tag nicht gelungen ist.

Also hier sieht man, es gibt immer Mittel und Wege, man muss diese nur finden. In diesem Praxisbeispiel habe ich einfach alle Cookies ausgegeben, welche auf meinem Computer zu finden waren. Beispielcode:

"><a onmouseover="alert(document.cookie)">xxs link</a>
xss heise charcode

In meinem letzten Beispiel habe ich das JavaScript Event „onerror“ getriggert. Ich habe mit Absicht ein Bild falsch eingebunden, sodass ein Error entstand und da ich vorher ein Event definiert hatte und gesagt hatte, was dann passieren sollte, konnte ich auch hier einfach die Ausgabe erzwingen.

Allerdings hatte ich dieses Mal den Code nicht lesbar definiert, sondern als Zeichencode (CharCode).

"><IMG SRC=/ onerror="alert(String.fromCharCode(88,83,83))">

Dieser Code wurde übersetzt und mittels Warnmeldung als Fenster im Browser ausgegeben. Logischerweise habe ich diese Lücke direkt an heise.de weitergeleitet. Tatsächlich wurde diese direkt am nächsten Tag geschlossen, indem ein Hotfix eingespielt wurde. Meinen Lob an der Stelle für die schnelle Reaktionszeit.

Auch die Möglichkeiten für Bad Guys waren sehr begrenzt, sodass sich auch niemand groß Sorgen machen musste. Trotzdem ist es wichtig auf solche Lücken hinzuweisen. Ich bedanke mich für deine Aufmerksamkeit und wünsche noch einen angenehmen Tag – dein Maurice.

Maurice Woitzyk

Maurice Woitzyk

Total posts created: 105
Hallo! Ich bin Maurice. Ich komme aus dem wunderschönen Magdeburg und wenn ich nicht gerade in CS:GO verzweifle, vertreibe ich mir meine Zeit mit meinem Blog und Web Design/Web Development.

Leave a reply

Your email address will not be published. Required fields are marked *