Utjecaj napadača
Nepravilna JWT provjera valjanosti omogućuje napadačima da zaobiđu mehanizme autentifikacije lažiranjem zahtjeva ili ponovnim korištenjem isteklih tokena [S1]. Ako poslužitelj prihvati tokene bez važećeg potpisa, napadač može modificirati sadržaj kako bi eskalirao privilegije ili oponašao bilo kojeg korisnika [S1]. Nadalje, neuspjeh u provedbi zahtjeva za istekom (exp) omogućuje napadaču neograničenu upotrebu kompromitiranog tokena [S1].
Glavni uzrok
JSON web token (JWT) struktura je temeljena na JSON-u koja se koristi za predstavljanje zahtjeva koji su digitalno potpisani ili zaštićeni integritetom [S1]. Sigurnosni propusti obično proizlaze iz dvije primarne praznine u implementaciji:
- Prihvaćanje nezaštićenih JWT-ova: Ako usluga striktno ne provodi provjeru potpisa, može obraditi "Neosigurane JWT-ove" gdje nema potpisa i algoritam je postavljen na "nema" [S1]. U ovom scenariju, poslužitelj vjeruje zahtjevima u nosivosti bez provjere njihovog integriteta [S1].
- Nedostaje provjera valjanosti zahtjeva: Zahtjev
exp(vrijeme isteka) identificira vrijeme na ili nakon kojeg se JWT ne smije prihvatiti za obradu [S1]. Tvrdnjaaud(publika) identificira namjeravane primatelje tokena [S1]. Ako nisu označeni, poslužitelj može prihvatiti tokene koji su istekli ili su bili namijenjeni drugoj aplikaciji [S1].
Konkretni popravci
- Primjena kriptografskih potpisa: Konfigurirajte aplikaciju da odbije svaki JWT koji ne koristi prethodno odobreni, jaki algoritam za potpisivanje (kao što je RS256).
- Potvrda isteka: Implementirajte obaveznu provjeru kako biste osigurali da su trenutni datum i vrijeme prije vremena navedenog u
expzahtjevu [S1]. - Provjeri publiku: Osigurajte da zahtjev
audsadrži vrijednost koja identificira lokalnu uslugu; ako usluga nije identificirana u zahtjevuaud, token se mora odbiti [S1]. - Spriječi ponavljanje: Koristite zahtjev
jti(JWT ID) za dodjelu jedinstvenog identifikatora svakom tokenu, dopuštajući poslužitelju da prati i odbije ponovno korištene tokene [S1].
Strategija otkrivanja
Ranjivosti u rukovanju JWT mogu se identificirati analizom strukture tokena i ponašanja odgovora poslužitelja:
- Provjera zaglavlja: Provjera zaglavlja
alg(algoritam) kako bi se osiguralo da nije postavljeno na "none" i da koristi očekivane kriptografske standarde [S1]. - Provjera zahtjeva: Potvrđivanje prisutnosti i valjanosti zahtjeva
exp(istek) iaud(publika) unutar JSON korisnog opterećenja [S1]. - Validacijsko testiranje: Testiranje odbija li poslužitelj ispravno tokene koji su istekli prema zahtjevu
expili su namijenjeni drugoj publici kako je definirano zahtjevomaud[S1].
