Session Fixation verstehen und beheben

Session Fixation ist auch Teil des “Broken Authentication & Session Management”-Punktes in den OWASP Top 10. Der Hintergrund ist eigentlich ganz einfach: Wenn wir die Session-ID eines eingeloggten Users kennen, können wir selbst eingelogged sein.

Wie funktioniert Session Fixation?

Die Frage die sich stellt ist natürlich: Woher kennen wir die Session-ID? Bei Session Fixation ist die Antwort ganz simpel: Wir setzen Sie selbst.

PHP akzeptiert von Hause aus jede gesetzte Session-ID. Wenn wir bei unserem Opfer also ein Cookie mit einer beliebigen, uns bekannten, Session-ID setzen, und sich dieser dann anmeldet, sind wir mit dem selben Cookie bei uns ebenso angemeldet.

Wenn die Session-ID in der URL weitergegeben würde, wäre der Angriff sehr, sehr einfach. Über Cookies muss etwas getrickst werden, denn Same-Origin-Policies sind nicht leicht zu umgehen. Da müsste wohl eine weitere Attacke wie XSS genutzt werden. Auf XSS werde ich in der Zukunft noch eingehen.

Die OWASP-Wiki erklärt den Angriff hier etwas genauer.

Was können wir gegen Session Fixation tun?

Die Antwort ist ebenso simpel, wie der Angriffsvektor selbst. Wir müssen überprüfen, ob wir die Session gesetzt haben. Hier ein Beispiel:

session_start();
if (!isset($_SESSION['initiated']) {
    session_regenerate_id();
    $_SESSION['initiated'] = true;
}

Dieser kleine Code sieht nach, ob in der Session ein Wert “initiated” vorkommt. Das kann nur der Fall sein, wenn wir es gesetzt haben. Wenn dieser Wert nicht vorkommt, dann erzeugen wir eine neue Session-ID und setzen den Wert “initiated”.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert