Angriberpåvirkning
Ukorrekt JWT-validering giver angribere mulighed for at omgå godkendelsesmekanismer ved at forfalske krav eller genbruge udløbne tokens [S1]. Hvis en server accepterer tokens uden en gyldig signatur, kan en angriber ændre nyttelasten for at eskalere privilegier eller efterligne enhver bruger [S1]. Hvis kravet om udløb (exp) ikke håndhæves, tillader en angriber desuden at bruge et kompromitteret token på ubestemt tid [S1].
Grundårsag
Et JSON Web Token (JWT) er en JSON-baseret struktur, der bruges til at repræsentere krav, der er digitalt signeret eller integritetsbeskyttet [S1]. Sikkerhedsfejl stammer typisk fra to primære implementeringshuller:
- Accept af usikrede JWT'er: Hvis en tjeneste ikke strengt håndhæver signaturverifikation, kan den behandle "Usikrede JWT'er", hvor signaturen er fraværende, og algoritmen er indstillet til "ingen" [S1]. I dette scenarie har serveren tillid til kravene i nyttelasten uden at verificere deres integritet [S1].
- Manglende kravvalidering:
exp-kravet (udløbstid) identificerer det tidspunkt, hvor JWT ikke må accepteres til behandling af [S1].aud(publikum)-kravet identificerer de tilsigtede modtagere af tokenet [S1]. Hvis disse ikke er markeret, kan serveren acceptere tokens, der er udløbet eller var beregnet til en anden applikation [S1].
Konkrete rettelser
- Tving kryptografiske signaturer: Konfigurer applikationen til at afvise enhver JWT, der ikke bruger en forudgodkendt, stærk signeringsalgoritme (såsom RS256).
- Valider udløb: Implementer en obligatorisk kontrol for at sikre, at den aktuelle dato og klokkeslæt er før det tidspunkt, der er angivet i
exp-kravet [S1]. - Bekræft målgruppe: Sørg for, at
aud-kravet indeholder en værdi, der identificerer den lokale tjeneste; hvis tjenesten ikke er identificeret iaud-kravet, skal tokenet afvises [S1]. - Forhindr genafspilning: Brug
jti(JWT ID)-kravet til at tildele en unik identifikator til hvert token, så serveren kan spore og afvise genbrugte tokens [S1].
Detektionsstrategi
Sårbarheder i JWT-håndtering kan identificeres ved at analysere tokenstrukturen og serverresponsadfærd:
- Header Inspection: Kontrollerer
alg(algoritme) overskriften for at sikre, at den ikke er sat til "ingen" og bruger forventede kryptografiske standarder [S1]. - Kravbekræftelse: Bekræftelse af tilstedeværelsen og gyldigheden af kravene til
exp(udløb) ogaud(publikum) inden for JSON-nyttelasten [S1]. - Valideringstest: Test af, om serveren korrekt afviser tokens, der er udløbet i henhold til
exp-kravet eller er beregnet til en anden målgruppe som defineret afaud-kravet [S1].
