FixVibe
Covered by FixVibehigh

Zabezpečení JWT: Rizika nezabezpečených tokenů a chybějící ověření nároku

Webové tokeny JSON (JWT) poskytují standard pro přenos nároků, ale zabezpečení závisí na přísném ověřování. Pokud se nepodaří ověřit podpisy, doby vypršení platnosti nebo zamýšlené cílové skupiny, útočníci mohou obejít autentizaci nebo přehrát tokeny.

CWE-347CWE-287CWE-613

Dopad útočníka

Nesprávné ověření JWT umožňuje útočníkům obejít mechanismy ověřování falšováním nároků nebo opětovným použitím tokenů, jejichž platnost vypršela [S1]. Pokud server přijme tokeny bez platného podpisu, může útočník upravit datovou část a zvýšit tak oprávnění nebo se vydávat za libovolného uživatele [S1]. Kromě toho selhání při vynucení nároku na vypršení platnosti (exp) umožňuje útočníkovi používat kompromitovaný token neomezeně dlouho [S1].

Hlavní příčina

Webový token JSON (JWT) je struktura založená na JSON používaná k reprezentaci nároků, které jsou digitálně podepsány nebo chráněny integritou [S1]. Selhání zabezpečení obvykle pramení ze dvou primárních implementačních mezer:

  • Akceptace nezabezpečených JWT: Pokud služba přísně nevynucuje ověřování podpisu, může zpracovat „nezabezpečená JWT“, kde podpis chybí a algoritmus je nastaven na „žádný“ [S1]. V tomto scénáři server důvěřuje nárokům v datové části, aniž by ověřoval jejich integritu [S1].
  • Chybějící ověření nároku: Reklamace exp (doba vypršení platnosti) identifikuje čas, kdy nebo po kterém nesmí být JWT přijat ke zpracování [S1]. Nárok aud (publikum) identifikuje zamýšlené příjemce tokenu [S1]. Pokud tyto nejsou zaškrtnuté, server může přijímat tokeny, kterým vypršela platnost nebo byly určeny pro jinou aplikaci [S1].

Opravy betonu

  • Vynutit kryptografické podpisy: Nakonfigurujte aplikaci tak, aby odmítla jakýkoli JWT, který nepoužívá předem schválený silný podpisový algoritmus (jako je RS256).
  • Ověřit vypršení platnosti: Proveďte povinnou kontrolu, abyste zajistili, že aktuální datum a čas jsou před časem uvedeným v nároku exp [S1].
  • Ověřte publikum: Ujistěte se, že požadavek aud obsahuje hodnotu identifikující místní službu; pokud služba není v reklamaci aud identifikována, musí být token odmítnut [S1].
  • Zabránit opakovanému přehrávání: Použijte nárok jti (ID JWT) k přiřazení jedinečného identifikátoru každému tokenu, což serveru umožní sledovat a odmítat znovu použité tokeny [S1].

Strategie detekce

Chyby zabezpečení ve zpracování JWT lze identifikovat analýzou struktury tokenu a chování odezvy serveru:

  • Kontrola záhlaví: Kontrola záhlaví alg (algoritmus), aby se zajistilo, že není nastaveno na "none" a používá očekávané kryptografické standardy [S1].
  • Ověření nároku: Potvrzení přítomnosti a platnosti nároků exp (vypršení platnosti) a aud (publikum) v rámci užitečného obsahu JSON [S1].
  • Validační testování: Testování, zda server správně odmítne tokeny, jejichž platnost vypršela podle nároku exp nebo jsou určeny pro jiné publikum, jak je definováno v nároku aud [S1].