Intressanter CSRF Bypass

Sebastian hat vor Kurzem einen interessanten CSRF Bypass gefunden, den wir euch natürlich nicht vorenthalten möchten.

Die Webapplikation nutzte Formulare, welche die eingegebenen Daten mit einem POST Request übermittelten:

1
2
3
4
5
6
7
8
9
10
POST /settings.php?save=1&email=foobar@test.com HTTP/1.1
Host: www.HOST.com
Connection: keep-alive
Content-Length: 150
Origin: https://HOST.com
X-Requested-With: XMLHttpRequest
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Cookie: [Cookies]

CSRFToken[token]=ac1bbdd8b6dd23f780f3594a6d02f62624f2ef430c464f7ddec617728a2999bf&CSRFToken[time]=1423073667737&CSRFToken[URI]=/settings

Wie man der Anfrage entnehmen kann, wurden mehrere CSRF Schutzmaßnahmen genutzt:

  • Origin-header
  • X-Requested-With-header
  • Content-Type-header
  • CSRFToken[token], CSRFToken[time]-parameters

Der einfachste Weg die CSRF Schutzmaßnahmen zu testen ist natürlich, die einzelen Parameter des Schutzes (etwa das CSRF Token) aus dem Request zu entfernen und zu überprüfen, ob die Änderungen zurückgewiesen oder zugelassen werden. Werden sie zugelassen, so ist die Applikation verwundbar, wenn sie zurückgewiesen werden, ist der Schutz korrekt implementiert und es besteht zumindest auf diese Weise keine Gefahr.

Die Webapplikation erkannte die Änderung und verweigerte die Speicherung der Daten, an Aufgeben ist aber dennoch nicht zu denken.

Wie kommt man dennoch weiter?

In der URL befindet sich der zu ändernde Parameter (email) - das sollte einen misstrauisch stimmen: Wieso sollten diese Daten in der URL enthalten sein, wenn die Abfrage über die POST Methode von statten geht?

Also es einfach mit mit folgender Abfrage, in der die Methode von GET auf POST geändert wurde, erneut versucht.

1
2
3
GET /settings.php?save=1&email=foobar@test.com HTTP/1.1
Host: www.HOST.com
Cookie: [Cookies]

Das ist eine simple GET-Anfrage und sie funktionierte. Es also möglich die CSRF Schutzmaßnahme zu umgehen.

Was lernen wir daraus?

  • Versuche kreativ zu sein und probiere verschiedene Methoden aus (etwa Wechsel der Abfrageart)
  • Und wie immer: Vertraue niemals blind den Eingaben des Nutzers ;)

Viele Grüße,

Das Team der internetwache.org