Die CSRF-Attacke kann dazu führen, dass der Benutzer ungewollte Aktionen ausführt, ohne dass er dies bemerkt. Beispielsweise könnten so Passwörter oder Email-Adressen im jeweiligen System, auf vom Angreifer ausgewählte Werte, geändert werden.
Da schon viele Frameworks Gegenmaßnamen eingebaut haben, kommt diese Lücke nur noch recht selten vor und ist deshalb 2017 aus den OWASP Top 10 rausgeflogen. Allerdings kann diese sehr mächtig sein, daher halte ich es für wichtig, dass man als Web-Entwickler darüber Bescheid weiß.
Wie funktioniert die Attacke?
Aufgrund des Session-Cookies, nachdem man sich eingeloggt hat, bleibt man auf der Webseite angemeldet. Bei manchen Webseiten (z.B. Facebook) gibt es ein recht langes Timeout, meist mehrere Wochen, sodass man sofort wieder angemeldet ist, wenn man das nächste Mal die Webseite besucht.
Diesen Umstand kann man ausnutzen, wenn es dem Angreifer gelingt eine gefälschte Anfrage an diese Website zu stellen, wenn man gerade eingeloggt ist. Falls es keine Gegenmaßnahmen gibt, ist es dem Angreifer möglich alle Aktionen die man als echter Benutzer durchführen kann, auch durchzuführen. Beispiele: Passwort ändern auf ein Passwort das der Angreifer aussucht, Email-Adresse auf eine Adresse des Angreifers ändern oder sonstige Daten so zu manipulieren, dass der Angreifer einen Vorteil daraus hat.
Dem Angreifer gelingt eine solche gefälschte Anfrage an die Website entweder über Links in Phishing-Mails oder aber auch über versteckte Links (z.B. hinter Bildern) auf einer anderen unsicheren Webseite.
Was kann man als Entwickler dagegen tun?
Kritische Aktionen, wie Passwort oder Email-Adresse ändern, sollten immer mit der Abfrage des aktuellen Passwortes geschützt sein. Es ist dem Benutzer aber aus Usability Gründen nicht zuzumuten, dass bei jeder Anfrage an die Webseite das Passwort abgefragt wird, daher gibt es noch folgende effektive Abwehrmaßnahmen.
Man kann über den HTTP-Header verifizieren, dass der Request von der echten „Origin“ ist. Details dazu am besten auf der OWASP Seite entnehmen. Diese Maßnahme für sich alleine kann schon sehr effektiv sein. Ich empfehle aber auch noch folgendes zu implementieren.
Anti-CSRF Tokens sind ein nachhaltiger Schutz gegen die Attacke, da diese Tokens, nicht wie ein Cookie automatisch bei jeder Anfrage übertragen werden, sondern nur wenn der Benutzer im Browser ein Formular absendet oder auf eine Link klickt, wo diese als POST- oder GET-Parameter übertragen werden. Details dazu bitte auch der OWASP Seite entnehmen.
Links:
https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)
https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet