Wir haben die Transportschicht mit TLS und mTLS abgesichert, Authentifizierung und Autorisierung implementiert. Aber welche Angriffe zielen speziell auf APIs? Die OWASP API Security Top 10 beschreiben die häufigsten und gefährlichsten API-Schwachstellen. Sie unterscheiden sich deutlich von den klassischen OWASP Top 10 für Webanwendungen, weil APIs andere Angriffsvektoren haben.


„OWASP hatten wir bei den Webanwendungen schon mit SQL-Injection und XSS. Gelten die gleichen Angriffe auch für APIs?“
„Teilweise, aber APIs haben andere Schwerpunkte. Klar, auch Injections können vorkommen, aber die häufigsten Probleme sind andere. Deshalb hat OWASP eine eigene Top-10-Liste nur für APIs erstellt.“

Schauen wir uns die Risiken einmal ganz konkret an:

Das haben wir bereits im Detail behandelt: Die API prüft nicht, ob der Benutzer auf das spezifische Objekt zugreifen darf. Ein Angreifer ändert einfach die ID im API-Aufruf und erhält Daten anderer Benutzer. Der beste Schutz: Bei jedem Zugriff die Berechtigung auf Objektebene prüfen.

Das haben wir ebenfalls schon ausführlich behandelt. Schwächen in der Authentifizierung selbst: fehlende Rate Limits auf dem Login-Endpunkt, keine vollständige Token-Validierung, Akzeptieren abgelaufener Tokens, schwache API-Keys.
Effektive Schutzmaßnahmen:
Damit ist eine spezielle Form der Authorization gemeint, nicht nur ob der Benutzer überhaupt auf das Objekt zugreifen darf. Die API gibt dabei mehr Datenfelder zurück, als der Benutzer sehen darf. Das passiert oft, wenn Entwickler der Einfachheit halber das komplette Datenbankobjekt zurückgeben, statt gezielt nur die erlaubten Felder auszuwählen.
Beispiel: Die Patienten-API von NovaHealth liefert bei einer Abfrage nicht nur Name und Geburtsdatum, sondern auch die interne Versicherungsnummer, die Abrechnungsdaten und das Erstelldatum des Datensatzes. Das sind Informationen, die der anfragende Benutzer eigentlich nicht benötigt und oft auch nicht sehen soll.
Oftmals holt sich die Frontend-Anwendung dann daraus was sie anzeigen soll, daher ist die Schwachstelle für normale Nutzer nicht direkt ersichtlich. Aber ein API-Request, der direkt an die Anwendung geht, erhält eben die gesamten Daten in der Response, nicht nur die, die angezeigt werden sollten. Die nachfolgende Abbildung veranschaulicht diese Situation:

Effektiver Schutz: Explizit definieren, welche Felder in der API-Antwort enthalten sein dürfen. Niemals das komplette Datenbankobjekt zurückgeben.
Die API setzt keine Limits für Anfragehäufigkeit, Payload-Größe oder Datenmenge. Ein Angreifer kann den Server überlasten oder durch riesige Payloads Speicher füllen.
Effektive Schutzmaßnahmen:
Im Unterschied zur Frage, ob der Benutzer die betreffenden Daten abrufen darf, ist hier die Frage: Darf dieser Nutzer diese Funktion überhaupt ausführen? Auch darauf sind wir bereits eingegangen.
Beispiel: Ein normaler Nutzer ruft einen Admin-Endpunkt mit einer kritische Aktion wie DELETE /api/admin/patienten/12345 auf. Hier ist nicht das einzelne Objekt das Problem, sondern dass die Funktion/Aktion für Anfragen ohne Berechtigung verboten sein sollte, auch wenn der Benutzer selbst Patient „12345“ ist und seine Daten sehen dürfte.

Effektiver Schutz wie zuvor auch: Berechtigungsprüfung auf jedem Endpunkt im Backend.
/api/v1/) bleiben aktiv und erreichbar, obwohl längst eine neuere Version (z.B. /api/v3/) im Einsatz ist. Die alten Versionen haben oft weniger Sicherheitsprüfungen und werden vergessen.💡 Die OWASP API Security Top 10 sind eine Pflichtlektüre für jeden, der APIs entwickelt oder absichert. Sie werden einigermaßen regelmäßig aktualisiert und die aktuelle Version (2023) spiegelt, wie bei allen OWASP Top Tens, die Angriffsmuster wider, die in der Praxis am häufigsten ausgenutzt werden.
Mal sehen, ob du die API-spezifischen Angriffe und ihre Gegenmaßnahmen draufhast. Ordne die folgenden Aussagen ein: