Exploitation de Mass Assignment

Exploiting a mass assignment vulnerability

Objectif du laboratoire Exploiter une vulnérabilité d’assignation de masse afin d’acheter le produit Lightweight "l33t" Leather Jacket sans disposer de fonds suffisants. Identifiants fournis : wiener / peter

Observation du fonctionnement normal

Lorsqu’un produit est ajouté au panier et que l’on tente de valider la commande, une requête est envoyée vers l’API :

Requête POST vers /api/checkout Le corps de la requête contient uniquement les produits sélectionnés :

Ensuite, lorsque l’on consulte l’état du panier, une requête GET est envoyée vers le même endpoint.

Requête GET vers /api/checkout La réponse renvoyée par le serveur est au format JSON et inclut des champs supplémentaires :

On remarque notamment la présence du champ chosen_discount.percentage, qui n’est pas contrôlé côté client lors de l’envoi initial.

Exploitation de la vulnérabilité

Lors de l’interception de la requête POST /api/checkout, il est possible d’ajouter manuellement le champ chosen_discount dans le corps de la requête.

Requête modifiée :

Cette modification est acceptée par le serveur lors du renvoi de la requête.

Résultat

Le serveur applique une réduction de 100 % sur le produit, ce qui permet de finaliser l’achat sans coût. La commande est validée avec succès, comme indiqué par la redirection vers :

Conclusion

Cette vulnérabilité repose sur une assignation de masse, où l’API accepte et traite des champs sensibles fournis par le client sans validation appropriée. En injectant un paramètre non prévu (chosen_discount), il est possible de modifier la logique métier et de contourner les contrôles de prix.

Mis à jour