Affectation de masse
Deux clés JSON supplémentaires, et le solde est à vous de définir.
Qu'est-ce que Affectation de masse?
Une API copie chaque champ du corps d'une requête sur un objet interne, sans liste des champs qu'un client peut définir. Le jeton est honnête et le dossier appartient à l'appelant. Ce qui manque, c'est un contrôle au niveau du terrain. Vous enverrez une mise à jour de profil normale, puis la même mise à jour avec deux clés JSON supplémentaires, et le serveur écrit les deux. Le correctif lit uniquement les champs qu'une modification de profil est censée modifier. Un contrôle de propriété ou un rôle de garde ne peut pas combler une lacune au niveau du terrain.
Ce que vous apprendrez dans Affectation de masse
- Reconnaître l'affectation de masse : une API lie chaque champ du corps de la requête d'un client à un objet stocké, afin qu'un client puisse définir des champs qu'il ne devrait jamais contrôler en les ajoutant à la requête
- Distinguez-le de l'autorisation au niveau de l'objet rompue (atteindre un objet qui n'est pas le vôtre) et de l'élévation de privilèges falsifiée par un jeton (falsification de vos propres informations d'identification) ; ici, le jeton est honnête et l'objet appartient correctement à l'appelant, et le contrôle manquant est au niveau du champ
- Découvrez comment une modification légitime en libre-service devient une fraude lorsque le gestionnaire écrit des champs fournis par le client que seul un processus interne doit définir, comme un solde de points ou un niveau de compte.
- Appliquez le correctif : remplacez une liaison aveugle du corps entier par une liste autorisée explicite des champs qu'une opération peut écrire et ignorez toutes les autres clés.
- Comprendre pourquoi une liste d'autorisation bat une liste de blocage, pourquoi le point de terminaison corrigé réussit avec 200 tout en supprimant les champs non inscriptibles, et auditez chaque gestionnaire de création et de mise à jour pour la même liaison aveugle
Affectation de masse — Étapes de la formation
-
Un membre ordinaire
Perklane est une application de récompenses pour les détaillants : les membres gagnent des points sur leurs achats et les échangent contre des cartes-cadeaux dans l'application. Bob s'est inscrit en tant que membre normal, avec une identité jetable, pour voir jusqu'où un compte ordinaire peut aller. Son compte n'a rien de spécial : un simple siège de membre avec un jeton qui lit et modifie son propre profil. Il ouvre la console développeur pour voir ce que l'API du compte lui donne.
-
Un objet, deux types de champs
La carte de profil de Bob affiche les champs que l'application lui permet de modifier, ainsi que les valeurs que l'application conserve à son sujet. La référence de l'API montre comment l'application lit et enregistre ce profil.
-
Lire son propre profil
Tout d'abord, Bob appelle le point de terminaison de la manière dont il est censé être utilisé : il demande à l'API son propre profil, portant son propre jeton de membre dans un en-tête d'autorisation, exactement comme le fait l'application.
-
Son profil, tous les domaines
Le serveur renvoie exactement ce qu'il devrait : le propre profil de Bob, car il a demandé son propre enregistrement avec son propre token. Rien ne va pas ici. Mais la forme du dossier mérite d’être examinée de près.
-
Effectuer une modification normale
Bob utilise d'abord la fonctionnalité comme prévu : une simple modification de profil. Il bascule la requête vers la méthode de sauvegarde et envoie un nouveau nom d'affichage et un nouveau avatar, les deux champs proposés réellement par le formulaire de profil.
-
La modification prend
La sauvegarde a fonctionné. Le nom d’affichage et l’avatar ont changé, et tout le reste est resté en place.
-
Voir la modification sur son profil
Avant d'aller plus loin, Bob fait ce que n'importe quel membre ferait après avoir sauvegardé : il recharge la page de son compte. Tout ce que la sauvegarde a écrit dans son dossier est ce que la page lit.
-
Ajoutez les champs que le formulaire n'affiche jamais
Même requête, même jeton, même point de terminaison. Bob conserve son nom d'affichage et son avatar dans le corps et ajoute deux clés supplémentaires, les noms de champs exacts que l'appel lu lui a remis : le solde de points et le niveau. Si la sauvegarde fusionne tout ce qu'elle reçoit, elle les écrira également.
-
Le solde qu'il n'a jamais gagné
Il a fallu tout cela. Le propre profil de Bob indique désormais qu'il a un demi-million de points et un niveau Platine, défini par rien de plus que deux clés supplémentaires lors d'une modification de profil.
-
A voir sur son profil
L'API a renvoyé 200, mais Bob souhaite voir les choses comme n'importe quel membre. Il recharge sa propre console de compte : tout ce que la sauvegarde a écrit dans son enregistrement est ce que la page va relire.
Couverture des référentiels de sécurité
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