Wednesday, January 17, 2007

Cross Site Request Forgery FAQ

In Anlehnung zu dem heute erschienenen CSRF FAQ auf CGISecurity.com möchte ich auch hier ein paar Takte zu diesem Begriff sagen, obgleich mein Weblog hier immer mehr zu einem Security Blog mutiert.

Nun die ersten Gedanken die man sich stellt, werden vermutlich sein, was CSRF ist und was damit angestellt werden kann. Der Begriff ähnelt ein Stück weit dem wohl bekannteren Cross Site Scripting (XSS), kann vergleichbar großen Schaden anrichten, baut jedoch auf anderen Prämissen auf. Während das primäre Ziel bei XSS Angriffen das ist, Schadcode in eine Website einzuschleusen, um ihn anschließend im Browser des Nutzers ausführen zu können (beispielsweise zum Diebstahl von Cookie Inhalten), werden bei CSRF die bereits vorhandenen (z.B. Session) Informationen dazu missbraucht, gezielte HTTP Requests an eine Website abzusetzen. Der Angreifer geht also davon aus, dass der Nutzer, der letzenendes unwissentlich den Request absetzt, authorisiert ist, eine bestimmte Aktion auf der anzugreifenden Website durchzuführen. Durch entsprechendes Social Engineering ist es mit CSRF genauso möglich, auf ein lokales Firmennetzwerk zuzugreifen.

Soviel zu dem Begriff. Wie ein solcher Angriff im Einzelnen durchgeführt wird, lässt sich leicht ergooglen bzw. im oben verlinkten FAQ nachzulesen. Wesentlich ist, wie man seine Applikationen davor schützen kann. Oft wird erwähnt, man solle POST statt GET verwenden, was jedoch kein effektiver Schutz ist, da es mit JavaScript ohne weiteres möglich ist, auch POST Requests abzusetzen. Von Schutz kann hier also keinesfalls gesprochen werden.

Ein weiteres Mittel zur Vorbeugung sind Session Tokens in Formularen, um sicher zu gehen, dass POST Daten auch wirklich aus den Formularen der eigenen Website stammen. Befindet sich allerdings eine durch XSS verwundbare Komponente auf der gleichen Seite wie das Formular, ist auch diese Schutzmaßnahme hinfällig, da es mittels XMLHttpRequest oder FlashRequest möglich ist, entsprechende Tokens aus den Formularen auszulesen (1). Selbiges gilt für Referrer Checks, Header können leicht manipuliert werden.

Wirklich effektiven Schutz hat man nur, wenn sichergestellt ist, dass Http Requests auch tatsächlich vom Nutzer abgesendet werden. Die einzige Möglichkeiten die ich sehe, um dies zu realisieren, sind zusätzliche Bestätigungen wie z.B. CAPTCHA's oder manuelle Passworteingabe, bei allen sicherheitsrelevanten Aktionen.

(1) Eine Methode dem entgegenzuwirken, hat Stefan Esser bereits vor einiger Zeit in seinem Blog beschrieben.

Tuesday, January 09, 2007

Angriff auf lokales Dateisystem

Adobe PDF Plugin Teil 2: Wie RSnake auf der Website ha.ackers.org (kurzzeitig offline) berichtete, ist es durch die UXSS Lücke auch möglich, auf das lokale Dateisystem zuzugreifen, indem man die manipulierte URL auf eine entsprechend lokale PDF Datei zielt.

file:///C:/Program%20Files/Adobe/Acrobat%207.0/Resource/ENUtxt.
pdf#s=javascript:alert("XSS");

Das die Möglichkeit ansich besteht, ist nicht weiter verwunderlich, hat jedoch gravierende Folgen, da es so möglich ist, Dateien zu lesen, zu erstellen und vergleichbare Aktionen durchzuführen. Es ist also dringlichst zu empfehlen, auf Adobe Acrobat 8.0 zu updaten, wo diese Art von Angriff nicht mehr durchführbar ist.

Adobe gibt mitlerweile auch ein Statement ab.

Thursday, January 04, 2007

Universal XSS durch Adobe PDF Plugin

Stefan Esser berichtete bereits gestern in seinem Blog von einem "Bug" im Adobe PDF Plugin, durch welches es möglich ist, XSS/CSRF Attacken an beliebige Websites zu richten, die PDF Files öffentlich über den Browser zugänglich machen.

Das ganze ist recht simpel durch Parametermanipulation durchführbar, indem man an die entsprechende URL eine beliebige Variable mit folgendem Inhalt anhängt:

#s=javascript:alert(document.cookie);
Beispielhaft ist es hier zu beobachten.

Der einzige Weg sich effektiv vor Cookie Diebstahl und ähnlichen Scherzen zu schützen ist, das Adobe Plugin zu deaktivieren. Im Firefox Browser ist letzteres über Einstellungen / Inhalt / Dateitypen einstellbar.

Im Internet Explorer 6.0 - 7.0 ist dieses Verhalten nicht zu beobachten, Opera hingegen reagiert ebenfalls auf die Manipulation in der Adresszeile. Ab Adobe Acrobat 8.0 soll das Problem behoben sein.

Monday, January 01, 2007

XSS auf blogger.com

Ein Bekannter von mir richtete sich heute Nachmittag einen Weblog auf http://blogger.com ein, wie schon Millionen blogbegeisterter Menschen vor ihm.

Sehr schön ist dort die Funktionalität, XML Feeds von anderen Websites einzulesen und in einer ensprechenden Navigationsleiste anzuzeigen. So können Besucher von Blog A sehr einfach auf neue Einträge von Blog B aufmerksam gemacht werden und gelangen über die Permalinks auch sehr schnell zum Ziel.

Hervorragende Sache, aber warum extra ein Eintrag deswegen?

Ich weise überdeutlichst darauf hin, dass diese Funktion nicht verwendet werden sollte, da die Feeds aus mir unerklärlichen Gründen nicht validiert werden und somit anfällig für XSS Attacken sind.

Es ist äußerst bedenklich, soetwas auf einer Seite zu finden, die bereits 2003 von Google gekauft wurde und seit August 1999 aktiv genutzt wird.