© saicle/Shutterstock.com
PHP Magazin
Neues rund um eine sehr alte Schwachstelle: Cross-Site Request Forgery

Confused Deputy 2015

Cross-Site Request Forgery (CSRF) ist eine sehr alte Schwachstelle. Das zugrunde liegende Problem wurde erstmals 1988 unter dem Namen „Confused Deputy“ beschrieben, die Bezeichnung „Cross-Site Request Forgery“ wurde 2001 geprägt. Inzwischen schreiben wir das Jahr 2015, und CSRF ist immer noch aktuell. Wäre es nicht Zeit, diese Schwachstelle endlich loszuwerden?

Carsten Eilers


Beim Cross-Site Request Forgery wird das Vertrauen einer Webanwendung in den Benutzer ausgenutzt, indem bestimmte Aktionen durch den Aufruf eines URLs ausgelöst und dabei im Kontext des eingeloggten Benutzers ausgeführt werden. Er wird von der Webanwendung meist anhand eines Session-Cookies erkannt, der vom Browser automatisch mit jedem Request an den betreffenden Server mitgeschickt wird.

Bei einem CSRF-Angriff wird das Opfer dazu gebracht, einen präparierten HTTP-Request abzuschicken, der dann eine Aktion in seinem Namen ausführt.

Ein einfaches Beispiel

Ein einfaches Beispiel für einen CSRF-Angriff loggt einen Benutzer bei der Webanwendung aus, wenn er eine Seite mit einem präparierten img-Tag darin aufruft. Das Ausloggen erfolgt zum Beispiel über den Aufruf von http://www.anwendung.example/logout.php; der CSRF-Angriff besteht dann aus einem img-Tag mit entsprechendem „Bild“-URL, zum Beispiel auf einer Webseite, auf die der Benutzer gelockt wird. Dabei ist es völlig egal, wo diese Seite gehostet wird, sie muss nicht einmal auf www.anwendung.example liegen.

Sobald das Opfer diese präparierte Seite erreicht, wird sie vom Browser gerendert. Wird dabei das img-Tag erreicht, versucht der Browser das „Bild“ zu laden und sendet dabei den Request zum Ausloggen des Benutzers an die Webanwendung. Dass diese kein Bild zurückliefert, stört dabei nicht weiter. Selbst wenn der Benutzer sich über die Markierung für ein fehlendes Bild in der fertigen Seite wundert, ist es für eine Reaktion längst zu spät. Die angegriffene Webanwendung hat den Request bereits erhalten, den Benutzer anhand seines Session-Cookies erkannt und ausgeloggt.

Nun ist das Ausloggen eines Benutzers nicht mal als schlechter Scherz geeignet; er meldet sich einfach wieder an und die Sache ist erledigt. Es sind aber auch sehr viel folgenreichere Angriffe möglich. Prinzipiell lässt sich fast jede Funktion einer Webanwendung über CSRF missbrauchen, sofern sie nicht vor entsprechenden Angriffen geschützt ist.

Ein uraltes Problem, aber nicht totzukriegen

Die Probleme, die sich durch das Vertrauen einer Anwendung in einen Benutzer ergeben, wurden erstmals 1988 unter dem Namen „Confused Deputy“ von Norm Hardy beschrieben [1]. Der Begriff Cross-Site Request Forgery wurde 2001 von Peter Watkins geprägt, der auch den Namen „Sea Surf“ für die Abkürzung CSRF vorschlug [2]. Trotz ihres Alters sind CSRF-Schwachstellen immer noch ein großes Problem, wie zum Beispiel e...

PHP Magazin
Neues rund um eine sehr alte Schwachstelle: Cross-Site Request Forgery

Confused Deputy 2015

Cross-Site Request Forgery (CSRF) ist eine sehr alte Schwachstelle. Das zugrunde liegende Problem wurde erstmals 1988 unter dem Namen „Confused Deputy“ beschrieben, die Bezeichnung „Cross-Site Request Forgery“ wurde 2001 geprägt. Inzwischen schreiben wir das Jahr 2015, und CSRF ist immer noch aktuell. Wäre es nicht Zeit, diese Schwachstelle endlich loszuwerden?

Carsten Eilers


Beim Cross-Site Request Forgery wird das Vertrauen einer Webanwendung in den Benutzer ausgenutzt, indem bestimmte Aktionen durch den Aufruf eines URLs ausgelöst und dabei im Kontext des eingeloggten Benutzers ausgeführt werden. Er wird von der Webanwendung meist anhand eines Session-Cookies erkannt, der vom Browser automatisch mit jedem Request an den betreffenden Server mitgeschickt wird.

Bei einem CSRF-Angriff wird das Opfer dazu gebracht, einen präparierten HTTP-Request abzuschicken, der dann eine Aktion in seinem Namen ausführt.

Ein einfaches Beispiel

Ein einfaches Beispiel für einen CSRF-Angriff loggt einen Benutzer bei der Webanwendung aus, wenn er eine Seite mit einem präparierten img-Tag darin aufruft. Das Ausloggen erfolgt zum Beispiel über den Aufruf von http://www.anwendung.example/logout.php; der CSRF-Angriff besteht dann aus einem img-Tag mit entsprechendem „Bild“-URL, zum Beispiel auf einer Webseite, auf die der Benutzer gelockt wird. Dabei ist es völlig egal, wo diese Seite gehostet wird, sie muss nicht einmal auf www.anwendung.example liegen.

Sobald das Opfer diese präparierte Seite erreicht, wird sie vom Browser gerendert. Wird dabei das img-Tag erreicht, versucht der Browser das „Bild“ zu laden und sendet dabei den Request zum Ausloggen des Benutzers an die Webanwendung. Dass diese kein Bild zurückliefert, stört dabei nicht weiter. Selbst wenn der Benutzer sich über die Markierung für ein fehlendes Bild in der fertigen Seite wundert, ist es für eine Reaktion längst zu spät. Die angegriffene Webanwendung hat den Request bereits erhalten, den Benutzer anhand seines Session-Cookies erkannt und ausgeloggt.

Nun ist das Ausloggen eines Benutzers nicht mal als schlechter Scherz geeignet; er meldet sich einfach wieder an und die Sache ist erledigt. Es sind aber auch sehr viel folgenreichere Angriffe möglich. Prinzipiell lässt sich fast jede Funktion einer Webanwendung über CSRF missbrauchen, sofern sie nicht vor entsprechenden Angriffen geschützt ist.

Ein uraltes Problem, aber nicht totzukriegen

Die Probleme, die sich durch das Vertrauen einer Anwendung in einen Benutzer ergeben, wurden erstmals 1988 unter dem Namen „Confused Deputy“ von Norm Hardy beschrieben [1]. Der Begriff Cross-Site Request Forgery wurde 2001 von Peter Watkins geprägt, der auch den Namen „Sea Surf“ für die Abkürzung CSRF vorschlug [2]. Trotz ihres Alters sind CSRF-Schwachstellen immer noch ein großes Problem, wie zum Beispiel e...

Neugierig geworden?


   
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang