FixVibe
Covered by FixVibehigh

JWT Zabezpečenie: Riziká nezabezpečených tokenov a chýbajúce overenie nároku

JSON Web Tokeny (JWT) poskytujú štandard na prenos nárokov, ale bezpečnosť sa spolieha na dôslednú validáciu. Neoverenie podpisov, časov vypršania platnosti alebo zamýšľaných cieľových skupín umožňuje útočníkom obísť overenie alebo prehrať tokeny.

CWE-347CWE-287CWE-613

Vplyv útočníka

Nesprávne overenie JWT umožňuje útočníkom obísť autentifikačné mechanizmy sfalšovaním nárokov alebo opätovným použitím tokenov, ktorých platnosť vypršala [S1]. Ak server akceptuje tokeny bez platného podpisu, útočník môže upraviť užitočné zaťaženie, aby zvýšil privilégiá alebo sa vydával za ľubovoľného používateľa [S1]. Okrem toho, ak sa nepodarí uplatniť nárok na vypršanie platnosti (exp), útočník môže používať kompromitovaný token neobmedzene dlho.

Hlavná príčina

Webový token JSON (JWT) je štruktúra založená na JSON používaná na reprezentáciu nárokov, ktoré sú digitálne podpísané alebo chránené proti integrite [S1]. Zlyhania zabezpečenia zvyčajne pramenia z dvoch primárnych medzier v implementácii:

  • Akceptovanie nezabezpečených JWT: Ak služba striktne nevynucuje overenie podpisu, môže spracovať „nezabezpečené JWT“, kde podpis chýba a algoritmus je nastavený na „žiadny“ [S1]. V tomto scenári server dôveruje nárokom v užitočnom zaťažení bez overenia ich integrity [S1].
  • Chýbajúce overenie nároku: Nárok exp (čas vypršania platnosti) identifikuje čas alebo po ktorom JWT nesmie byť akceptovaný na spracovanie [S1]. Nárok aud (publikum) identifikuje zamýšľaných príjemcov tokenu [S1]. Ak tieto nie sú začiarknuté, server môže akceptovať tokeny, ktorých platnosť vypršala alebo boli určené pre inú aplikáciu [S1].

Opravy betónu

  • Vynútiť kryptografické podpisy: Nakonfigurujte aplikáciu tak, aby odmietla akékoľvek JWT, ktoré nepoužívajú vopred schválený silný podpisový algoritmus (napríklad RS256).
  • Potvrdenie platnosti: Implementujte povinnú kontrolu, aby ste sa uistili, že aktuálny dátum a čas sú pred časom uvedeným v nároku exp [S1].
  • Verify Audience: Uistite sa, že nárok aud obsahuje hodnotu identifikujúcu miestnu službu; ak služba nie je identifikovaná v reklamácii aud, token musí byť odmietnutý [S1].
  • Zabránenie opakovanému prehrávaniu: Použite nárok jti (ID JWT) na priradenie jedinečného identifikátora každému tokenu, čo umožní serveru sledovať a odmietnuť opätovne použité tokeny [S1].

Stratégia detekcie

Zraniteľnosť pri manipulácii so JWT je možné identifikovať analýzou štruktúry tokenu a správania odozvy servera:

  • Kontrola hlavičky: Kontrola hlavičky alg (algoritmus), aby ste sa uistili, že nie je nastavená na "none" a používa očakávané kryptografické štandardy [S1].
  • Overenie nároku: Potvrdenie prítomnosti a platnosti nárokov exp (vypršanie platnosti) a aud (publikum) v rámci užitočného zaťaženia JSON [S1].
  • Validačné testovanie: Testovanie, či server správne odmietne tokeny, ktorých platnosť vypršala podľa nároku exp alebo sú určené pre iné publikum, ako je definované v nároku aud [S1].