FixVibe
Covered by FixVibehigh

JWT Sigurnost: Rizici nezaštićenih tokena i nedostajuće provjere valjanosti zahtjeva

JSON web tokeni (JWT) pružaju standard za prijenos zahtjeva, ali sigurnost se oslanja na rigoroznu provjeru valjanosti. Neuspjeh u provjeravanju potpisa, vremena isteka ili namijenjene publike omogućuje napadačima da zaobiđu autentifikaciju ili ponovno reproduciraju tokene.

CWE-347CWE-287CWE-613

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]. Tvrdnja aud (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 exp zahtjevu [S1].
  • Provjeri publiku: Osigurajte da zahtjev aud sadrži vrijednost koja identificira lokalnu uslugu; ako usluga nije identificirana u zahtjevu aud, 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) i aud (publika) unutar JSON korisnog opterećenja [S1].
  • Validacijsko testiranje: Testiranje odbija li poslužitelj ispravno tokene koji su istekli prema zahtjevu exp ili su namijenjeni drugoj publici kako je definirano zahtjevom aud [S1].