In diesem Beitrag zu unserer Reihe zur OWASP Top Ten, den häufigsten Sicherheitslücken in Webapplikationen, erklären wir das Gefahrenpotential von sogenannten direkten Objektreferenzen (engl. „Insecure direct object references“). Dabei handelt es sich um eine simple, häufig übersehene Sicherheitslücke mit großen Auswirkungen. Sie kann überall dort auftreten, wo verschiedene Benutzer mit verschiedenen horizontalen Berechtigungsstufen auf die Ressourcen bzw. Inhalte der Webapplikation zugreifen. Durch das Ändern von Parametern einer Browseranfrage kann ein potentieller Angreifer dann möglicherweise Inhalte aufrufen, welche gar nicht für seine Berechtigungsstufe bestimmt sind.
Beispiel
Ein Kunde loggt sich in eine Webapplikation ein, um seine Stammdaten zu ändern. In der Applikation gibt es dafür einen Link im Menü. Dieser Link zum Aktualisierungsformular lautet
https://www.example.com/aktual_stammdaten.php?kdn=1337
Hier wird der Parameter „kdn“, der wahrscheinlich für „Kundennummer“ steht, direkt in der URL übergeben. Dies entspricht einer direkten Objektreferenz. Ob daraus allerdings auch eine Sicherheitslücke resultiert, kann überprüft werden, indem manuell eine andere Kundennummer eingetragen wird. Sofern die Applikation nun ein Formular wiedergibt, in dem die Daten von einem anderen Kunden eingetragen sind, liegt eine unsichere direkte Objektreferenz vor.
Gegenmaßnahmen
Zunächst sollten sensible Parameter grundsätzlich nicht per GET-Anfrage in der URL, sondern als POST-Parameter im Dokumententext, übergeben werden. Des Weiteren gilt der übliche Grundsatz: Vertraue niemals Benutzereingaben. Generell sollten Benutzereingaben validiert werden, d.h. im Beispiel sollte mit einer Kontrolle der horizontalen Zugriffsberechtigungen überprüft werden, ob die angegebene Kundennummer auch zum eingeloggten Benutzer gehört. Für eine solche Überprüfung reicht oft eine Codezeile.
Zusammenfassung
Unsichere direkte Objektreferenzen stellen Schwachstellen dar, die durch fehlende serverseitige Überprüfung von Benutzereingaben den Zugriff auf sensible Daten anderer Benutzer bzw. die Ausweitung der horizontalen Zugriffsberechtigungen ermöglichen können. In unseren Penetrationstests begegnet uns diese Sicherheitslücke oft in Webapplikationen, die für eine Vielzahl von Benutzern ausgelegt sind. Mit unsicheren direkten Objektreferenzen kann die Benutzertrennung umgangen werden und Zugriff auf fremde Daten ermöglichen.