FixVibe
Covered by FixVibehigh

JWT-beveiliging: risico's van onbeveiligde tokens en ontbrekende claimvalidatie

JSON Web Tokens (JWT's) bieden een standaard voor het overdragen van claims, maar de beveiliging is afhankelijk van rigoureuze validatie. Als de handtekeningen, vervaltijden of beoogde doelgroepen niet worden geverifieerd, kunnen aanvallers de authenticatie omzeilen of tokens opnieuw afspelen.

CWE-347CWE-287CWE-613

Impact van aanvaller

Onjuiste JWT-validatie stelt aanvallers in staat authenticatiemechanismen te omzeilen door claims te vervalsen of verlopen tokens [S1] opnieuw te gebruiken. Als een server tokens accepteert zonder een geldige handtekening, kan een aanvaller de payload wijzigen om de bevoegdheden te escaleren of zich voor te doen als een gebruiker [S1]. Bovendien kan een aanvaller, als de vervaldatum (exp) niet wordt afgedwongen, een gecompromitteerd token voor onbepaalde tijd gebruiken [S1].

Oorzaak

Een JSON-webtoken (JWT) is een op JSON gebaseerde structuur die wordt gebruikt om claims weer te geven die digitaal zijn ondertekend of met integriteitsbescherming [S1]. Beveiligingsfouten komen doorgaans voort uit twee primaire implementatielacunes:

  • Acceptatie van onbeveiligde JWT's: als een service handtekeningverificatie niet strikt afdwingt, kan deze "onbeveiligde JWT's" verwerken waarbij de handtekening ontbreekt en het algoritme is ingesteld op "geen" [S1]. In dit scenario vertrouwt de server de claims in de payload zonder de integriteit ervan te verifiëren [S1].
  • Validatie van ontbrekende claim: De exp-claim (vervaltijd) identificeert het tijdstip waarop of waarna de JWT niet mag worden geaccepteerd voor verwerking van [S1]. De aud-claim (doelgroep) identificeert de beoogde ontvangers van het token [S1]. Als deze niet zijn aangevinkt, accepteert de server mogelijk tokens die verlopen zijn of bedoeld waren voor een andere applicatie [S1].

Betonreparaties

  • Cryptografische handtekeningen afdwingen: configureer de applicatie om elke JWT te weigeren die geen vooraf goedgekeurd, krachtig ondertekeningsalgoritme gebruikt (zoals RS256).
  • Vervaldatum valideren: Implementeer een verplichte controle om ervoor te zorgen dat de huidige datum en tijd vóór de tijd liggen die is opgegeven in de exp-claim [S1].
  • Doelgroep verifiëren: zorg ervoor dat de aud-claim een waarde bevat die de lokale service identificeert; als de service niet wordt geïdentificeerd in de aud-claim, moet het token [S1] worden afgewezen.
  • Voorkom herhaling: gebruik de claim jti (JWT ID) om een unieke identificatie aan elk token toe te wijzen, zodat de server hergebruikte tokens [S1] kan volgen en weigeren.

Detectiestrategie

Kwetsbaarheden in de verwerking van JWT kunnen worden geïdentificeerd door de tokenstructuur en het reactiegedrag van de server te analyseren:

  • Headerinspectie: controle van de alg-header (algoritme) om er zeker van te zijn dat deze niet is ingesteld op 'none' en de verwachte cryptografische standaarden [S1] gebruikt.
  • Claimverificatie: bevestiging van de aanwezigheid en geldigheid van de claims exp (vervaldatum) en aud (doelgroep) binnen de JSON-payload [S1].
  • Validatietesten: testen of de server tokens correct afwijst die zijn verlopen volgens de exp-claim of bedoeld zijn voor een ander publiek zoals gedefinieerd door de aud-claim [S1].