it-swarm-eu.dev

CSRF mit JSON POST

Ich spiele mit einer Testanwendung herum, die JSON-Anforderungen akzeptiert, und die Antwort ist auch JSON. Ich versuche, eine CSRF für eine Transaktion durchzuführen, die nur JSON-Daten mit POST Methode in Anfrage akzeptiert. Die Anwendung gibt einen Fehler aus, wenn eine URL mit der Methode get angefordert wird (z. B. in <script src=). ).

Damit der Angriff sinnvoll ist, d. H. Die Transaktion ausgeführt werden soll, muss ich die Daten in der Anforderung senden. Wenn ich meine eigene Seite erstelle und die JSON-Anforderungen sende, werden keine Cookies gesendet und der Server gibt daher eine nicht authentifizierte Fehlermeldung zurück.

Die ursprüngliche Anforderung des Servers enthält keine zufälligen Token.

Ich habe mich gefragt, ob es in diesem Szenario eine Möglichkeit gibt, einen erfolgreichen CSRF-Angriff durchzuführen.

32
Sachin Kumar

Sie müssen mindestens auf der Anfrage nach Content-Type: application/json Prüfen.

Es ist nicht möglich, einen POSTed <form> Zu erhalten, um eine Anfrage mit Content-Type: application/json Zu senden. Sie können jedoch ein Formular mit einer gültigen JSON-Struktur im Text als enctype="text/plain" Übermitteln.

Es ist nicht möglich, einen Cross-Origin ( CORS ) XMLHttpRequest POST mit Content-Type: application/json Gegen ein Non durchzuführen -cross-Origin-fähiger Server, da dies dazu führt, dass eine HTTP-OPTIONS-Anforderung vor dem Flug zuerst genehmigt wird. Sie können jedoch einen originübergreifenden XMLHttpRequest senden POST withCredentials wenn es text/plain ist.

Selbst wenn Sie application/json Prüfen, können Sie XSRF ziemlich nahe kommen, wenn nicht sogar vollständig. Und die Verhaltensweisen, auf die Sie sich verlassen, um diese Sicherheit zu gewährleisten, sind etwas dunkel und befinden sich noch in der Phase des Arbeitsentwurfs. Sie sind keine festen Garantien für die Zukunft des Webs.

Diese können beispielsweise beschädigt werden, wenn Formularen in einer zukünftigen HTML-Version ein neues JSON enctype hinzugefügt wurde. (WHATWG hat den Enctype text/plain Zu HTML5 hinzugefügt und ursprünglich auch versucht, text/xml Hinzuzufügen, sodass dies nicht ausgeschlossen ist.) Sie erhöhen das Risiko von Kompromissen durch kleinere, subtilere Browser- und Plugin-Fehler in der CORS-Implementierung.

Obwohl Sie wahrscheinlich vorerst damit durchkommen können, würde ich absolut nicht empfehlen, ohne ein geeignetes Anti-XSRF-Tokensystem weiterzumachen.

37
bobince

Dies kann laut https://code.google.com/p/browsersec/wiki/Part2#Same-Origin_policy_for_Flash mit Flash ausgenutzt werden

Die Möglichkeit, Cookie-tragende domänenübergreifende HTTP-GET- und POST - Anforderungen über den Browser-Stack zu erstellen, mit weniger Einschränkungen als an anderen Stellen in Browsern üblich. Dies wird über die URLRequest-API erreicht. Dazu gehört insbesondere die Möglichkeit, beliebige Werte für den Inhaltstyp anzugeben und binäre Nutzdaten zu senden.

Ich habe es nicht selbst getestet, aber es klingt plausibel.

Update: Es sieht so aus, als ob die neuesten Flash-Versionen standardmäßig keine domänenübergreifenden Anforderungen mehr zulassen, sodass dies nicht mehr ausgenutzt werden kann.

Update Nr. 2: Es gibt jedoch eine langjährige Sicherheitslücke in der Behandlung von 307 Weiterleitungen durch Flash, was bedeutet, dass dies immer noch ausnutzbar ist

7
albinowax