Assegnazione di massa
Due chiavi JSON extra e il saldo sarà tuo.
Cos’è Assegnazione di massa?
Un'API copia ogni campo nel corpo della richiesta su un oggetto interno, senza alcun elenco dei campi che un client può impostare. Il token è onesto e il record appartiene al chiamante. Ciò che manca è un controllo a livello di campo. Invierai un normale aggiornamento del profilo, quindi lo stesso aggiornamento con due chiavi JSON aggiuntive e il server le scriverà entrambe. La correzione legge solo i campi che una modifica del profilo intende modificare. Un controllo della proprietà o una guardia di ruolo non possono colmare un divario a livello di campo.
Cosa imparerai in Assegnazione di massa
- Riconoscere l'assegnazione di massa: un'API associa ogni campo nel corpo della richiesta di un client a un oggetto archiviato, in modo che un client possa impostare campi che non dovrebbe mai controllare aggiungendoli alla richiesta
- Distinguerlo dall'autorizzazione a livello di oggetto non funzionante (raggiungendo un oggetto che non è tuo) e dall'escalation dei privilegi di forgiatura di token (manomissione delle tue stesse credenziali); qui il token è onesto e l'oggetto è correttamente di proprietà del chiamante e il controllo mancante è a livello di campo
- Scopri come una modifica self-service legittima diventa una frode quando il gestore scrive campi forniti dal cliente che solo un processo interno dovrebbe impostare, come il saldo punti o il livello dell'account
- Applicare la correzione: sostituire un collegamento cieco dell'intero corpo con un elenco consentito esplicito dei campi che un'operazione può scrivere e ignorare ogni altra chiave
- Comprendere perché un elenco consentito batte un elenco bloccato, perché l'endpoint con patch riesce a raggiungere 200 eliminando i campi non scrivibili e controlla ogni gestore di creazione e aggiornamento per lo stesso collegamento cieco
Assegnazione di massa — Fasi della formazione
-
Un membro ordinario
Perklane è un'app di premi al dettaglio: i membri guadagnano punti sugli acquisti e li riscattano con buoni regalo nell'app. Bob si è iscritto come membro normale, con un'identità usa e getta, per vedere fino a che punto può spingersi un account normale. Il suo account non è niente di speciale: un semplice posto membro con un token che legge e modifica il suo profilo. Apre la console per sviluppatori per vedere cosa gli offre l'API dell'account.
-
Un oggetto, due tipi di campo
La scheda del profilo di Bob mostra i campi che l'app gli consente di modificare e accanto a essi i valori che l'app conserva su di lui. Il riferimento API mostra come l'app legge e salva quel profilo.
-
Leggi il suo profilo
Per prima cosa Bob chiama l'endpoint nel modo in cui deve essere utilizzato: chiede all'API il proprio profilo, portando il proprio token membro in un'intestazione di autorizzazione, esattamente come fa l'app.
-
Il suo profilo, ogni campo
Il server restituisce esattamente quello che dovrebbe: il profilo di Bob, perché ha chiesto il proprio record con il proprio token. Non c'è niente di sbagliato qui. Ma vale la pena dare un'occhiata più da vicino alla forma del disco.
-
Effettua una modifica normale
Bob utilizza inizialmente la funzionalità come previsto: una semplice modifica del profilo. Passa la richiesta al metodo di salvataggio e invia un nuovo nome visualizzato e avatar, i due campi effettivamente offerti dal modulo del profilo.
-
La modifica richiede
Il salvataggio ha funzionato. Il nome visualizzato e l'avatar sono cambiati e tutto il resto è rimasto invariato.
-
Vedi la modifica sul suo profilo
Prima di spingersi oltre, Bob fa quello che farebbe qualsiasi membro dopo aver salvato: ricarica la pagina del suo account. Qualunque cosa il salvataggio abbia scritto sul suo record è ciò che la pagina rilegge.
-
Aggiungi i campi che il modulo non mostra mai
Stessa richiesta, stesso token, stesso endpoint. Bob mantiene il nome visualizzato e l'avatar nel corpo e aggiunge altre due chiavi, i nomi esatti dei campi che gli è stato consegnato dalla chiamata letta: il saldo dei punti e il livello. Se il salvataggio unisce tutto ciò che riceve, scriverà anche questi.
-
Il saldo che non ha mai guadagnato
C'è voluto tutto. Il profilo di Bob ora dice che ha mezzo milione di punti e un livello platino, stabilito da nient'altro che due chiavi extra in una modifica del profilo.
-
Guardalo sul suo profilo
L'API ha restituito 200, ma Bob vuole vederlo come lo vedrebbe qualsiasi membro. Ricarica la console del proprio account: qualunque cosa il salvataggio abbia scritto sul suo record è ciò che la pagina rileggerà.
Copertura dei framework di sicurezza
OWASP API Top 10
- API6:2019 Mass Assignment
CWE
- CWE-915 Improperly Controlled Modification of Dynamically-Determined Object Attributes
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