Onbeperkt hulpbronnenverbruik
Eén verzoek, een kwart miljoen records, geen limiet in zicht.
Wat is Onbeperkt hulpbronnenverbruik?
Sommige eindpunten stellen geen grenzen aan de hoeveelheid werk die een verzoek kan vergen. Een lijsteindpunt haalt zijn paginagrootte rechtstreeks uit het verzoek en geeft deze door aan de database zonder maximum aan de serverzijde, zodat een beller om de hele tabel kan vragen. Je legt de door de beller bestuurde limit-parameter vast, bouwt het verzoek opnieuw op waarin om alles wordt gevraagd, en ziet hoe één antwoord de hele catalogus doorzoekt terwijl je de database vastzet. De oplossing beperkt het paginaformaat tot een maximum aan de serverzijde. Een nieuwe probe retourneert een begrensde 200 OK.
Wat je leert in Onbeperkt hulpbronnenverbruik
- Herken het onbeperkte verbruik van hulpbronnen waarbij een eindpunt geen grenzen stelt aan hoeveel een enkel verzoek kan verbruiken, zodat één oproep onbeperkt werk kan afdwingen
- Begrijp dat een door de beller opgegeven paginagrootte (of aantal, grootte of diepte) zonder maximum aan de serverzijde ervoor zorgt dat één enkel verzoek een volledige dataset in één keer kan retourneren
- Zie dat een onbeperkte paginagrootte zowel een massaschrapende vector als een denial-of-service-hefboom is, omdat één te groot verzoek geheugen uitput en een databaseverbinding tot stand brengt
- Maak onderscheid tussen toegangsfouten op objectniveau, over-serialisatie van velden en gaten in de authenticatie; hier is de authenticatie prima en is de ontbrekende controle een resource gebonden per verzoek
- Pas de oplossing toe: beperk de gevraagde paginagrootte tot een maximum aan de serverzijde, houd de limiet op de server, pagineer grote resultatensets met een cursor en voeg snelheidslimieten toe per client en tijdvenster
Onbeperkt hulpbronnenverbruik — Trainingsstappen
-
Een openbare browsefeed
Vendlo is een tweedehandsmarktplaats-app: leden geven een lijst van dingen die ze willen verkopen en iedereen kan door de catalogus bladeren. Vandaag richt Bob zich op Vendlo. Hij wil er twee dingen van: de volledige livecatalogus en de prijzen ervan, om door te verkopen aan een concurrent, en een goedkope manier om de API omver te werpen als hij besluit dat te doen. Hij heeft zich aangemeld als gewoon lid en opent de openbare browsefeed om te zien hoe deze wordt geladen.
-
Bekijk het verzoek
Het raster waar Bob naar kijkt, is afgeleid van gegevens die de app via de API heeft opgehaald. Het toont 24 vermeldingen en een opmerking dat er nog veel meer achter zitten. Bob opent de netwerktools van de browser en laadt de pagina één keer opnieuw om de oproep vast te leggen die de app maakt om de feed te bouwen.
-
Het paginaformaat is dat van de beller
Het herladen is vastgelegd en het verzoek staat in het netwerkpaneel. Bob leest hoe de app om de pagina met vermeldingen vroeg.
-
Een kwart miljoen achter de pagina
Bob opent het antwoord dat het eindpunt heeft geretourneerd en leest wat het zegt over de grootte van de catalogus.
-
Vraag alles
Bob bouwt dezelfde aanroep opnieuw op in de API-tester en verandert één ding: in plaats van een pagina van 24 vraagt hij om 250.000 vermeldingen in één verzoek. Als de server het respecteert, krijgt hij met één telefoontje de hele catalogus.
-
Eén aanvraag, de hele catalogus
De server deed precies wat hem werd gevraagd. Het antwoord vertelt het verhaal van wat dat heeft gekost.
-
De winkelpui sluit
Negen seconden is lang om een databaseverbinding tot stand te brengen. Bob vuurt hetzelfde verzoek opnieuw af, een paar exemplaren tegelijk, en elk exemplaar doorloopt een kwart miljoen rijen terwijl de verbinding de hele tijd behouden blijft. De verbindingspool van Vendlo is klein, dus hoewel deze vragen de verbindingen verbinden, kan de openbare winkel er geen eigen krijgen. Terwijl ze rennen, laadt Bob de pagina van Vendlo opnieuw om te zien wat een echte shopper nu zou zien.
-
Echte shoppers, buitengesloten
Hetzelfde eindpunt dat Bob zojuist de hele catalogus heeft overhandigd, kan een gewone klant niet bedienen. De API-tester toont nog steeds zijn 200 met de volledige catalogus; de winkelpui ernaast laat zien wat alle anderen krijgen.
-
Kennis check
-
De waarschuwing komt binnen
U bent eigenaar van de catalogus-API van Vendlo. Van de ene op de andere dag werd door de monitoring één lidaccount gemarkeerd waarvan de verzoeken elk de volledige catalogus retourneerden en een databaseverbinding negen seconden openhielden, waarbij de API-latentie op elk eindpunt toenam terwijl ze actief waren. Beveiligingsoperaties hebben u een e-mail gestuurd.
Dekking van beveiligingsframeworks
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