Cross-Site Request Forgery (CSRF) ist ein Angriff, der den Browser eines angemeldeten Nutzers dazu bringt, unbemerkt eine unerwünschte Anfrage an eine Website zu senden, die diese mit den Rechten des Nutzers ausführt.
Wie CSRF funktioniert
Browser hängen Cookies automatisch an Anfragen an eine Website an – egal, welche Seite die Anfrage ausgelöst hat. Angenommen, Sie sind im Onlinebanking oder in der Router-Oberfläche angemeldet und öffnen eine bösartige Seite. Diese kann ein verstecktes Formular oder Bild enthalten, das eine Anfrage wie „E-Mail-Adresse ändern“, „Geld überweisen“ oder „DNS-Server ändern“ an die andere Website schickt. Der Browser fügt Ihr Sitzungscookie hinzu, und prüft die Website die Herkunft nicht, führt sie die Aktion aus, als hätten Sie selbst geklickt.
Die Schwäche ist als CWE-352 katalogisiert. Anders als bei Cross-Site-Scripting kann der Angreifer die Antwort nicht lesen – Ziel ist eine zustandsändernde Aktion. Exploit-Kits nutzten CSRF gegen Heimrouter, um unbemerkt deren DNS-Einstellungen zu ändern und Nutzer auf Phishing-Seiten umzuleiten.
Warum CSRF wichtig ist
Per CSRF lassen sich E-Mail-Adressen und Passwörter von Konten ändern (und Konten so übernehmen), Admin-Benutzer in Content-Management-Systemen anlegen, Geräteeinstellungen ändern oder Käufe tätigen. Kombiniert mit anderen Fehlern wird CSRF zum Schritt in Richtung Session-Hijacking oder Codeausführung. Häufige Opfer sind Admin-Oberflächen von Routern, NAS-Geräten und WordPress-Plugins.
So verhindern Sie CSRF
- Anti-CSRF-Tokens verwenden: ein zufälliger, an die Sitzung gebundener Wert, der jede zustandsändernde Anfrage begleiten muss.
- Sitzungscookies mit dem SameSite-Attribut (Lax oder Strict) setzen; große Browser nutzen inzwischen standardmäßig Lax.
- Bei sensiblen Anfragen den Origin- oder Referer-Header prüfen.
- Für kritische Aktionen erneute Authentifizierung verlangen und Zustand nie per GET-Anfrage ändern.
Wie SQL-Injection und SSRF ist CSRF ein klassischer Webfehler, den die Standardeinstellungen moderner Frameworks weitgehend verhindern – sofern Entwickler sie nicht abschalten.