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]. Deaud-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 deaud-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) enaud(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 deaud-claim [S1].
