FixVibe
Covered by FixVibehigh

JWT Securitate: Riscurile de jetoane nesecurizate și lipsa validării revendicării

Tokenurile web JSON (JWT) oferă un standard pentru transferul revendicărilor, dar securitatea se bazează pe o validare riguroasă. Eșecul de a verifica semnăturile, termenele de expirare sau publicul vizat permite atacatorilor să ocolească autentificarea sau tokenurile de reluare.

CWE-347CWE-287CWE-613

Impactul atacatorului

Validarea necorespunzătoare a JWT permite atacatorilor să ocolească mecanismele de autentificare falsificând revendicări sau reutilizand jetoane expirate [S1]. Dacă un server acceptă jetoane fără o semnătură validă, un atacator poate modifica sarcina utilă pentru a escalada privilegiile sau a uzurpa identitatea oricărui utilizator [S1]. În plus, nerespectarea cererii de expirare (exp) permite unui atacator să folosească un token compromis pe termen nelimitat [S1].

Cauza fundamentală

Un simbol web JSON (JWT) este o structură bazată pe JSON utilizată pentru a reprezenta revendicări semnate digital sau protejate cu integritatea [S1]. Eșecurile de securitate provin de obicei din două lacune principale de implementare:

  • Acceptarea JWT nesecurizate: Dacă un serviciu nu impune strict verificarea semnăturii, poate procesa „JWT nesecurizate” în cazul în care semnătura este absentă și algoritmul este setat la „niciunul” [S1]. În acest scenariu, serverul are încredere în revendicările în sarcina utilă fără a verifica integritatea acestora [S1].
  • Lipsă validarea revendicării: revendicarea exp (timpul de expirare) identifică momentul în care sau după care JWT nu trebuie acceptat pentru procesarea [S1]. Revendicarea aud (publicul) identifică destinatarii vizați ai simbolului [S1]. Dacă acestea nu sunt bifate, serverul poate accepta token-uri care au expirat sau au fost destinate unei aplicații diferite [S1].

Remedieri concrete

  • Implementarea semnăturilor criptografice: Configurați aplicația pentru a respinge orice JWT care nu utilizează un algoritm de semnare puternic, preaprobat (cum ar fi RS256).
  • Validați expirarea: implementați o verificare obligatorie pentru a vă asigura că data și ora curente sunt înainte de ora specificată în revendicarea exp [S1].
  • Verificați publicul: asigurați-vă că revendicarea aud conține o valoare care identifică serviciul local; dacă serviciul nu este identificat în revendicarea aud, jetonul trebuie respins [S1].
  • Preveniți reluarea: utilizați revendicarea jti (ID-ul JWT) pentru a atribui un identificator unic fiecărui jeton, permițând serverului să urmărească și să respingă jetonele reutilizate [S1].

Strategia de detectare

Vulnerabilitățile în gestionarea JWT pot fi identificate prin analiza structurii token-ului și a comportamentului de răspuns al serverului:

  • Inspecție antet: verificarea antetului alg (algoritm) pentru a vă asigura că nu este setat la „niciunul” și că utilizează standardele criptografice așteptate [S1].
  • Verificarea revendicării: Confirmarea prezenței și validității revendicărilor exp (expirare) și aud (public) în sarcina utilă JSON [S1].
  • Testarea de validare: se testează dacă serverul respinge corect token-urile care au expirat conform revendicării exp sau sunt destinate unui public diferit, așa cum este definit de revendicarea aud [S1].