XSS – Cross Site Scripting mit Bildern – Drupal Security Teil 1


XSS – Cross Site Scripting. Was ist das? Wikipedia erklärt das am Besten:

Cross-Site Scripting (XSS) bezeichnet das Ausnutzen einer Computersicherheitslücke in Webanwendungen, indem Informationen aus einem Kontext, in dem sie nicht vertrauenswürdig sind, in einen anderen Kontext eingefügt werden, in dem sie als vertrauenswürdig eingestuft werden. Aus diesem vertrauenswürdigen Kontext kann dann ein Angriff gestartet werden. [Wikipedia]

Also, ein Beispiel wäre wie folgt. Ein Benutzer schreibt einen Forumsbeitrag und schleust dort einfach ein kleines Script ein, z.B.:

 <script type="text/javascript">alert("XSS");</script>

Wenn man das einfach so ohne Weiteres in die Datenbank schreibt, dann wird der nächste Forenbesucher ein kleine Messagebox angezeigt bekommen, welche "XSS" sagt. Ist eigentlich in diesem Fall nicht weiter schlimm, aber was wäre, wenn da jetzt eine Ajax Verbindung zu einem Server aufgebaut wird, und drin ein Keylogger versteckt ist? Es ist relativ offensichtlich, dass es wahrscheinlich relativ schnell gefährlich werden kann.

Was kann man dagegen machen? Ist eigentlich relativ einfach: Die Tags löschen oder entsprechend in HTML Entities umformen:

&lt;script type="text/javascript"&gt;alert("XSS");&lt;/script&gt;

Das wird dann einfach dargestellt, aber nicht mehr ausgeführt. Wenn man ein Forum erstellt, so kümmert sich Drupal darum, vorausgesetzt, man stellt die Input Formats richtig ein. Per Default sind diese auf Filtert gesetzt. Das heisst, es werden nur ganz wenige HTML Tags zugelassen. Das lässt sich natürlich auch ändern. Das heisst aber sowiel, dass wenn man CCK und Co verwendet ist man eigentlich auf der sicheren Seite.

Wer jedoch selber Module entwickelt, der muss sich auch selber darum kümmern, denn z.B.

hook_menu wird implementiert. Der Benutzer kann ein argument eingeben, welches an die Callback Funktion übergeben wird, welche dann das Argument auf der Seite ausgibt. Wenn man nichts mit dem Input macht, so kann der Benutzer auch irgend etwas eingeben -> Schlecht.

In Drupal gibt es die Funktion check_plain. Die macht genau das, was man braucht. Sie verhindert XSS Sicherheitskücken. Das heisst für den Entwickler: Jeglicher Input Text muss durch diese Funktion geschleust werden -> wenn es lediglich normaler Text sein soll!

Im nächsten Teil geht es um Sicherheitsattacken via Bilder.