Oliver hat gestern Abend noch ein bisschen bei der besagten Seite weitergeforscht.
Er hat ein Szenario entdeckt, durch das mit der gefundenen XSS-Lücke ein Wurm gestartet werden kann, der schnell einen Großteil der Benutzer infizieren könnte.
Er leistet also gute Aufklärungsarbeit, denn manchen ist die Gefahr von XSS-Lücken auf Webseiten auf denen man sich anmelden kann und dort persönliche Daten hinterlässt, nicht bewusst.
Aber: Nicht nur XSS-Lücken innerhalb des eingeloggten Bereichs sind gefährlich!
Oftmals denk man sich: Das Loginformular müsse ja nicht abgesichert werden.
Im eingloggten Zustand erreicht man die Login-Seite ja nicht. Also geht davon keine Gefahr aus. Richtig, wenn man alles schön ordentlich programmiert, dann nicht.
Allerdings gibt es Seiten, auf denen bekommt man, sobald man diese betritt, eine Session-ID zugewiesen.
Manchmal auch noch eine Server-ID, wenn es sich um ein Server-Cluster handelt.
Wenn jetzt auf Sicherheit nicht viel Rücksicht genommen wurde, ändert sich diese Session-ID nach dem Login nicht.
Folgendes Szenario ist also denkbar:
Ich verbreite einen Link, der auf eine Login-Webseite linkt. Per Javascript verschleiere ich den genauen Link, sodass der Benutzer denkt, er wäre ganz normal auf der angegebenen Seite.
In dem Moment konnte jedoch schon eine Anfrage an einen anderen Server geschickt werden, die durch die XSS-Attacke welche Daten enthält? Ja, genau. Die Server-ID und die Session-ID.
Jetzt muss der Benutzer sich nur noch einloggen. Der Angreifer kennt Session-ID und Server-ID, tauscht diese in seinen Cookie-Daten aus und schwupps – der Angreifer ist mit dem Account des ahnungslosen Users eingeloggt.
So, jetzt 2 Regeln, die man zur Sicherung diesr XSS-Attacken auf jeden Fall befolgen sollte:
- Formulareingaben, die irgendwo wieder ausgegeben werden in PHP durch htmlentities($string, ENT_QUOTES) filtern. Somit wird kein HTML ausgegeben. Jedes Sonderzeichen wird durch den entsprechenden HTML-Code ersetzt. Der HTML-Code wird als nicht ausgewertet, sondern angezeigt.
- Um sicher zu gehen (manchmal benutzt man auf der gleichen Domain Fremdsoftware, die ggf. nicht sicher ist) sollte man mit der Funktion session_id() nach dem Login auf einer Seite eine neue Session-ID erzeugen.
Natürlich gibt es weitere Software zum Absichern der Seiten. Z.B. mod_security.







