Antiforgery Tokens sind wiederverwendbar

8

Wir verwenden die standardmäßige Anti-Forgery-Technik von ASP.NET MVC. Kürzlich hat eine Sicherheitsfirma einen Scan eines Formulars durchgeführt und festgestellt, dass sie die gleiche _RequestVerificationToken -Kombination (Cookie + verstecktes Feld) mehrmals verwenden können. Oder wie sie es ausdrücken: "Das CSRF-Token im Hauptteil wird auf der Serverseite überprüft, aber nach der Verwendung nicht widerrufen, obwohl der Server generiert ein neues CSRF-Token. "

Nachdem ich die Dokumentation und mehrere Artikel über die Implementierung von Antiforgery gelesen habe, verstehe ich, dass dies tatsächlich möglich ist, solange der Sitzungsbenutzer den Benutzer in den Tokens abgleicht.

Teil ihrer Empfehlung: "Solche Tokens sollten, um ein Minimum, einmalig pro Benutzersitzung " Nach meinem Verständnis ist dies bereits der Fall, außer für anonyme Benutzer, richtig?

Meine Fragen: Ist das ein Sicherheitsproblem? Wie viel Risiko ist es? Gibt es eine Bibliothek, die sicherstellt, dass Token nicht wiederverwendet / ungültig gemacht werden können?

Wenn nicht, klingt ein zusätzliches zufälliges Token in der Sitzung, das bei jeder Anfrage zurückgesetzt wird, so, als würde es das Problem lösen.

    
sniels 29.05.2017, 15:58
quelle

1 Antwort

2

Der Kunde stimmte schließlich zu, dass die antimikrobielle Implementierung von ASP.NET ausreichend ist. Nur zum Spaß wollte ich Antiforgery erweitern, um die Ungültigkeitserklärung zu erfüllen.

Die Antiforgery-Bibliothek hat einen Erweiterungspunkt: IAntiforgeryAdditionalDataProvider ( Core ) und IAntiForgeryAdditionalDataProvider ( pre -Core )

In ASP.NET MVC (Pre-Core) können Sie dies beim Start festlegen.

%Vor%

Für ASP.NET Core müssen Sie Ihr IAntiforgeryAdditionalDataProvider als Service registrieren. Wenn Sie dies nicht tun, wird die DefaultAntiforgeryAdditionalDataProvider ( Quelle verwendet ), die nichts tun.

%Vor%

Jetzt können Sie Ihrem Antiforgery-Token weitere Daten hinzufügen, die in Ihr Cookie- und Formularfeld eingepflegt werden. Hier ist ein Beispiel für ein MVC-Core, das sich in Sitzung an einem einzelnen Token festhält und es nach der Verwendung entfernt.

%Vor%

Dies wird nicht empfohlen, da beim Öffnen mehrerer Tabs mit mehreren Formularen nur eines der Formulare das gültige Token in der Sitzung enthält und das andere fehlschlägt. Deshalb habe ich einen gemacht, der mehrere Tokens festhält. Sie finden den AdditionalDataProvider und andere auf GitHub (zeitbasiert, Warteschlangenbasiert).

    
sniels 28.07.2017, 19:48
quelle