Consumo illimitato di risorse
Una richiesta, un quarto di milione di record, nessun limite in vista.
Cos’è Consumo illimitato di risorse?
Alcuni endpoint non pongono limiti alla quantità di lavoro che una richiesta può richiedere. Un endpoint elenco prende la dimensione della pagina direttamente dalla richiesta e la passa al database senza un limite massimo lato server, in modo che un chiamante possa richiedere l'intera tabella. Catturerai il parametro del limite controllato dal chiamante, ricostruirai la richiesta chiedendo tutto e guarderai una risposta raschiare l'intero catalogo mentre blocchi il database. La correzione blocca le dimensioni della pagina sul lato server e la associa all'impaginazione del cursore. Una nuova sonda restituisce un valore limitato di 200 OK.
Cosa imparerai in Consumo illimitato di risorse
- Riconoscere il consumo illimitato di risorse in cui un endpoint non pone limiti al consumo di una singola richiesta, in modo che una chiamata possa forzare un lavoro illimitato
- Comprendere che una dimensione di pagina fornita dal chiamante (o conteggio, dimensione o profondità) senza un massimo lato server consente a una singola richiesta di restituire un intero set di dati contemporaneamente
- Osserva che una dimensione di pagina senza limiti è sia un vettore di massa che una leva di negazione del servizio, perché una richiesta sovradimensionata esaurisce la memoria e blocca una connessione al database
- Distinguere questo dai difetti di accesso a livello di oggetto, dall'eccessiva serializzazione dei campi e dalle lacune di autenticazione; qui l'autenticazione va bene e il controllo mancante è una risorsa vincolata per richiesta
- Applica la correzione: limita la dimensione della pagina richiesta a un valore massimo lato server, mantieni il limite sul server, impagina set di risultati di grandi dimensioni con un cursore e aggiungi limiti di velocità per client e finestra temporale
Consumo illimitato di risorse — Fasi della formazione
-
Un feed di navigazione pubblico
Vendlo è un'app di mercato dell'usato: i membri elencano gli oggetti da vendere e chiunque può sfogliare il catalogo. Oggi Bob prende di mira Vendlo. Vuole due cose da esso: l'intero catalogo live e i suoi prezzi, da rivendere a un concorrente, e un modo economico per eliminare l'API se decide di farlo. Si è iscritto come membro ordinario e apre il feed di navigazione pubblico per vedere come viene caricato.
-
Guarda la richiesta
La griglia che Bob sta guardando è stata ricavata dai dati recuperati dall'app tramite l'API. Mostra 24 elenchi e una nota che ce ne sono molti altri dietro di essi. Bob apre gli strumenti di rete del browser e ricarica la pagina una volta per acquisire la chiamata effettuata dall'app per creare il feed.
-
La dimensione della pagina è quella del chiamante
La ricarica è stata acquisita e la richiesta si trova nel pannello Rete. Bob legge come l'app ha richiesto la sua pagina di elenchi.
-
Un quarto di milione dietro la pagina
Bob apre la risposta restituita dall'endpoint e legge ciò che dice sulla dimensione del catalogo.
-
Chiedi tutto
Bob ricostruisce la stessa chiamata nel tester API e cambia una cosa: invece di una pagina di 24, chiede 250.000 elenchi in un'unica richiesta. Se il server lo onora, una chiamata gli consegnerà l'intero catalogo.
-
Una sola richiesta, l'intero catalogo
Il server ha fatto esattamente quello che gli era stato chiesto. La risposta racconta la storia di quanto è costato.
-
La vetrina del negozio cede
Quella richiesta è ancora in esecuzione, macinando un quarto di milione di righe e mantenendo una connessione al database per tutto il tempo. Il pool di connessioni di Vendlo è piccolo, quindi mentre quella query collega una connessione, il negozio pubblico non può ottenerne una propria. Bob ricarica la pagina di Vendlo per vedere cosa vedrebbe un vero acquirente in questo momento.
-
Acquirenti veri, bloccati
Lo stesso endpoint che ha appena consegnato a Bob l'intero catalogo ora non può servire un acquirente normale. Il tester API mostra ancora il suo 200 con il catalogo completo; la vetrina accanto mostra ciò che ottengono tutti gli altri.
-
Verifica della conoscenza
Hai appena visto una richiesta estrarre un quarto di milione di record e bloccare il database. Blocca il perché.
-
Arriva l'allerta
Possiedi l'API del catalogo di Vendlo. Durante la notte, il monitoraggio ha segnalato una singola richiesta che ha restituito l'intero catalogo e ha mantenuto aperta una connessione al database per nove secondi, con un picco di latenza dell'API su ogni endpoint durante l'esecuzione. Le operazioni di sicurezza ti hanno inviato un'e-mail.
Copertura dei framework di sicurezza
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