Welche Auswirkungen eine fehlerhafte Autorisierung auf  Anwendungsebene haben kann und was Sie dagegen unternehmen können, zeigt unser heutiger Beitrag aus der OWASP Top Ten Reihe.

Grundsätzlich entsteht eine fehlerhafte Autorisierung auf Anwendungsebene durch eine fehlende oder unzureichende serverseitige Überprüfung von Zugriffsberechtigungen. Die Sicherheitslücke tritt weiterhin auf, wenn die Berechtigungsprüfung ausschließlich auf Parametern basiert, welche durch den Benutzer bzw. Angreifer an die Webanwendung übergeben wurden. Als Folge besteht häufig die Möglichkeit, die existierenden Zugriffsrechte auf vertikaler Ebene auszuweiten, das heißt ein normaler Benutzer der Webapplikation kann auf Funktionen für höher privilegierte bzw. administrative Anwender zugreifen. Eine horizontale Rechteausweitung, also der Zugriff auf die Daten anderer Benutzer, ist durch eine Manipulation von ID-Parametern ebenfalls möglich, sollte allerdings bereits durch die entsprechende Validierung oder noch besser durch Vermeidung von direkten Objektreferenzen verhindert werden.

Das Risiko von vertikalen Rechteausweitungen tritt vor allem in modernen Single-Page-Webanwendungen (englisch Single-Page-Application, kurz SPA), welche aus einem einzigen HTML-Dokument bestehen und die Daten dynamisch nachladen, wieder vermehrt auf. Dabei wird die Anwendungslogik – inklusive Session-Management –  mit Hilfe von JavaScript-Frameworks, wie beispielsweise Angular, Durandal/Aurelia oder auch Ember, nahezu vollständig auf den Client (üblicherweise der Webbrowser) ausgelagert. Der zugrundliegende Webserver übernimmt dann je nach Anwendungsszenario in der Regel nur noch die Bereitstellung von statischen Ressourcen und verarbeitet die Daten über eine REST/SOAP-API, was die Webapplikation serverseitig zu einem reinen Webservice zusammenschrumpft. Das Problem ist dabei, dass eine Authentifizierung des Benutzers häufig nur einmal beim Start der Anwendung bzw. beim ersten Aufruf der Webapplikation durchgeführt wird, und das Rechte-Management im weiteren Verlauf der Sitzung dann ausschließlich clientseitig erfolgt. Nachfolgende API-Abfragen werden dann nicht mehr serverseitig validiert.

Beispielszenarien:

  • Privilegierte oder administrative Funktion werden durch die Webapplikation für normale Benutzer ausgeblendet und sind daher im User-Interface nicht sichtbar. Durch den Aufruf der entsprechenden URL kann die Funktion dennoch von jeder Person mit Zugriff auf die Anwendung genutzt werden.
  • Die Rollen- bzw. Zugriffsberechtigungen des Benutzers werden beim Start der Anwendung in einem Cookie hinterlegt und bei jeder folgenden HTTP-Anfrage mitgesendet. Sofern sich der Webserver/Webservice ausschließlich auf den Inhalt des Cookies verlässt, kann ein Angreifer den Cookie  clientseitig manipulieren und somit die vorhandenen Zugriffsrechte beliebig erweitern.
  • Die Webapplikation zeigt einen Datensatz mit dem Aufruf von
    https://www.example.com/stammdaten.php?action=read
    an, erlaubt dem Benutzer aber keinen schreibenden Zugriff auf die Daten. Durch die Manipulatorin des übermittelten GET-Parameters zu
    https://www.example.com/stammdaten.php?action=delete
    wird der entsprechende Datensatz aufgrund einer fehlenden Validierung dennoch gelöscht.

Gegenmaßnahmen

Grundsätzlich sollten alle Zugriffsrechte bei jedem Funktionsaufruf serverseitig auf Grundlage des hinterlegten Rollen- bzw. Berechtigungskonzeptes geprüft und mit der Datenbank der Anwendung abgeglichen werden. Zudem sollte das Konzept vor der Implementierung so genau wie möglich spezifiziert und dann ebenso konsequent umgesetzt werden. Dabei empfiehlt sich zum einen die Rechtevergabe nach dem Minimalprinzip, das heißt jeder Nutzer ist nur für die Aktionen berechtigt, welche für seine Aufgabenerfüllung auch wirklich notwendig sind. Zum anderen sollte die Webapplikation nach dem Prinzip des generellen Verbots (Deny All Principle) aufgebaut sein, wobei standardmäßig zunächst alle Zugriffe verweigert und nur durch explizite Rollen bzw. Berechtigungen erlaubt werden. Weiterhin sollte das Berechtigungskonzept weitestgehend modular und niemals statisch im Quellcode kodiert sein.

Da es sich bei  fehlerhaften Autorisierungen auf Anwendungsebene zudem hauptsächlich um logische Fehler im Workflow der jeweiligen Applikationen handelt, lassen sich diese Sicherheitslücken durch automatisierte Tests mit Webapplikationsscannern auch nur schwer aufdecken. Daher Prüfen wir im Rahmen eines Penetrationstests zusätzlich die Ausweitung von Zugriffsrechten mit mehrstufigen, manuellen sowie spezifisch an den Untersuchungsgegenstand angepassten Testmethoden.

Zusammenfassung

Eine fehlerhafte Autorisierung auf Anwendungsebene ist eine häufige und in der Regel leicht auszunutzende Schwachstelle mit möglicherweise sehr hohem Schadenspotential. Angreifer nutzen diese Schwachstelle meistens, um Zugriff auf administrative Funktionen zu erlangen, wobei ggf. beliebige Benutzerdaten eingesehen und manipuliert werden können. Weiterhin besteht die Möglichkeit, dass die gesamte Webapplikation inklusive der zugrundeliegenden IT-Infrastruktur korrumpiert wird. Die Ursachen bzw. Fehler lassen sich zudem häufig nur durch manuelle Tests und Validierungen – beispielsweise mit Hilfe eines Penetrationstests – zuverlässig erkennen.