Ear Execution After Redirect

Was ist EAR (Execution after Redirect)?

Bei EAR (Execution after Redirect) handelt es sich um einen Angriff, bei dem der Angreifende einen Redirect ignoriert und dadurch sensible Daten von angemeldeten Anwendern empfängt oder Zugriff auf gesperrte Webseiten erlangt. Ein erfolgreicher EAR Exploit kann die die Anwendung vollständig kompromittieren. Ein möglicher Anwendungsfall ist zum Beispiel der Zugriff auf eine Webseite, die nur für angemeldete Nutzer sichtbar sein soll.

Wie sieht ein Beispiel für EAR aus?

Der folgende Code macht einen EAR Angriff möglich: <?php if (!$loggedin) { header('location: login.php'); } echo "Dies soll nur angemeldeten Nutzern gezeigt werden."; ?>

Dieser Code prüft, ob der Parameter „loggedin“ wahr ist. Ist dies nicht der Fall, wird der Nutzer zur Seite „login.php" weitergeleitet. Der Code sendet den Redirect und zusätzlich die Daten, die nur für angemeldete Anwender gedacht sind. Der Angreifer kann jedoch den Redirect ignorieren und auf diese Weise Informationen für eingeloggte Nutzer einsehen.

Der Programmierer muss daher mit seinem Script-Code Sorge tragen, dass nach dem Redirect keine sensiblen Daten mehr gesendet werden. In PHP lässt sich dies nach dem Redirect mit dem Befehl „die();“ sicherstellen. Der folgende Code macht einen EAR Angriff unmöglich, der Anwender kann die Weiterleitung nicht ignorieren:

~

<?php if (!$loggedin) { header('location: login.php'); die(); // der Befehl stellt sicher, dass nichts weiter gesendet wird } echo "Dies soll nur angemeldeten Nutzern gezeigt werden."; ?>

~

Das zweite Script wird feststellen, dass der Seitenaufrufer nicht eingeloggt ist und ihn zur Seite login.php weiterleiten. Das Script wird dann den Befehl „die();“ ausführen, der die weitere Ausführung des Scipts stoppt und den weiteren Versand von Daten verhindert.

Was passiert beim Redirect?

Der Browser folgt einem Redirect. Wird jedoch ein Proxy genutzt oder ein HTTP-Client, der kein Browser ist, ermöglicht das Ignorieren des Redirects das Auslesen der folgenden Daten.

Um das Ignorieren von Redirects zu verhindern, müssen Programmierer von Webseiten die Seite also nach einem Redirect einfach terminieren und dafür die Funktion „dead();“ verwenden.