Unbegrenzter Ressourcenverbrauch

Unbegrenzter Ressourcenverbrauch

Eine Anfrage, eine Viertelmillion Datensätze, keine Obergrenze in Sicht.

Was ist Unbegrenzter Ressourcenverbrauch?

Bei einigen Endpunkten gibt es keine Begrenzung dafür, wie viel Arbeit eine Anfrage erfordern kann. Ein Listenendpunkt übernimmt seine Seitengröße direkt aus der Anfrage und übergibt sie ohne serverseitiges Maximum an die Datenbank, sodass ein Aufrufer die gesamte Tabelle anfordern kann. Sie erfassen den vom Anrufer gesteuerten Grenzwertparameter, erstellen die Anfrage neu und fragen nach allem und beobachten, wie eine Antwort den gesamten Katalog durchsucht, während sie die Datenbank anheftet. Der Fix legt die Seitengröße serverseitig fest und koppelt sie mit der Cursor-Paginierung. Eine erneute Prüfung gibt einen begrenzten Wert von 200 OK zurück.

Was Sie lernen in Unbegrenzter Ressourcenverbrauch

Unbegrenzter Ressourcenverbrauch — Trainingsschritte

  1. Ein öffentlicher Inserate-Feed

    Vendlo ist eine App für einen Gebrauchtwaren-Marktplatz: Mitglieder stellen ein, was sie verkaufen wollen, und im Katalog stöbern darf jeder. Heute hat Bob es auf Vendlo abgesehen. Zwei Dinge will er: den kompletten Live-Katalog samt Preisen, um ihn an einen Wettbewerber weiterzuverkaufen, und einen billigen Weg, die API umzukippen, falls er sich dafür entscheidet. Er hat sich als ganz normales Mitglied registriert und öffnet den öffentlichen Inserate-Feed, um zu sehen, wie er lädt.

  2. Die Anfrage beobachten

    Das Raster, das Bob vor sich hat, ist aus Daten aufgebaut, die die App über die API geholt hat. Es zeigt 24 Inserate und den Hinweis, dass dahinter noch weit mehr stecken. Bob öffnet die Netzwerk-Tools des Browsers und lädt die Seite einmal neu, um den Aufruf mitzuschneiden, mit dem die App den Feed zusammenbaut.

  3. Die Seitengröße bestimmt der Aufrufer

    Das Neuladen ist mitgeschnitten, und die Anfrage liegt im Netzwerk-Panel. Bob liest nach, wie die App ihre Seite mit Inseraten angefordert hat.

  4. Eine Viertelmillion hinter der Seite

    Bob öffnet die Antwort des Endpunkts und liest nach, was sie über die Größe des Katalogs verrät.

  5. Alles auf einmal anfordern

    Bob baut denselben Aufruf im API Tester nach und ändert genau eine Sache: Statt einer Seite mit 24 fordert er 250.000 Inserate in einer einzigen Anfrage an. Wenn der Server das bedient, liefert ihm ein einziger Aufruf den kompletten Katalog.

  6. Eine Anfrage, der ganze Katalog

    Der Server hat genau das getan, worum er gebeten wurde. Was das gekostet hat, erzählt die Antwort.

  7. Der Shop geht in die Knie

    Diese eine Anfrage läuft immer noch, arbeitet sich durch eine Viertelmillion Zeilen und belegt dabei ununterbrochen eine Datenbankverbindung. Vendlos Connection Pool ist klein: Solange diese Abfrage eine Verbindung bindet, bekommt der öffentliche Shop keine eigene ab. Bob lädt Vendlos Seite neu, um zu sehen, was ein echter Käufer in diesem Moment zu sehen bekäme.

  8. Echte Käufer, ausgesperrt

    Derselbe Endpunkt, der Bob gerade den kompletten Katalog ausgehändigt hat, schafft es jetzt nicht mehr, einen gewöhnlichen Käufer zu bedienen. Im API Tester steht weiterhin sein 200 mit dem vollständigen Katalog; die Shop-Seite daneben zeigt, was alle anderen bekommen.

  9. Wissenscheck

    Sie haben gerade gesehen, wie eine einzige Anfrage eine Viertelmillion Datensätze abholt und die Datenbank lahmlegt. Prägen Sie sich ein, warum das möglich war.

  10. Der Alarm trifft ein

    Sie verantworten Vendlos Katalog-API. Über Nacht ist dem Monitoring eine einzelne Anfrage aufgefallen, die den kompletten Katalog zurückgegeben und neun Sekunden lang eine Datenbankverbindung offen gehalten hat — währenddessen schoss die Latenz über sämtliche Endpunkte der API hinweg nach oben. Security Operations hat Ihnen eine E-Mail geschickt.

Abdeckung der Sicherheits-Frameworks

OWASP API Top 10

  • API4:2023 Unrestricted Resource Consumption

CWE

  • CWE-770 Allocation of Resources Without Limits or Throttling
  • CWE-400 Uncontrolled Resource Consumption

CIS Controls

  • CIS 16 Application Software Security

NIST CSF

  • PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
  • PR.PS Platform Security