FixVibe
Covered by FixVibehigh

JWT Sikkerhet: Risiko for usikrede tokens og manglende kravvalidering

JSON Web Tokens (JWTs) gir en standard for overføring av krav, men sikkerhet er avhengig av streng validering. Unnlatelse av å bekrefte signaturer, utløpstider eller tiltenkte målgrupper gjør at angripere kan omgå autentisering eller spille av tokens.

CWE-347CWE-287CWE-613

Angriperpåvirkning

Feil JWT-validering lar angripere omgå autentiseringsmekanismer ved å forfalske krav eller gjenbruke utløpte tokens [S1]. Hvis en server godtar tokens uten en gyldig signatur, kan en angriper endre nyttelasten for å eskalere privilegier eller utgi seg for å være en hvilken som helst bruker [S1]. Videre, unnlatelse av å håndheve utløpskravet (exp) tillater en angriper å bruke et kompromittert token på ubestemt tid [S1].

Grunnårsak

Et JSON Web Token (JWT) er en JSON-basert struktur som brukes til å representere krav som er digitalt signert eller integritetsbeskyttet [S1]. Sikkerhetsfeil stammer vanligvis fra to primære implementeringshull:

  • Godsept av usikrede JWT-er: Hvis en tjeneste ikke strengt håndhever signaturverifisering, kan den behandle "Usikrede JWT-er" der signaturen er fraværende og algoritmen er satt til "ingen" [S1]. I dette scenariet stoler serveren på kravene i nyttelasten uten å verifisere deres integritet [S1].
  • Manglende kravvalidering: exp (utløpstid)-kravet identifiserer tidspunktet på eller etter hvilket JWT ikke må aksepteres for behandling av [S1]. aud (publikum)-kravet identifiserer de tiltenkte mottakerne av tokenet [S1]. Hvis disse ikke er merket av, kan serveren godta tokens som er utløpt eller som er ment for en annen applikasjon [S1].

Betongrettinger

  • Håndhev kryptografiske signaturer: Konfigurer applikasjonen til å avvise alle JWT som ikke bruker en forhåndsgodkjent, sterk signeringsalgoritme (som RS256).
  • Valider utløp: Implementer en obligatorisk sjekk for å sikre at gjeldende dato og klokkeslett er før tiden spesifisert i exp-kravet [S1].
  • Bekreft målgruppe: Sørg for at aud-kravet inneholder en verdi som identifiserer den lokale tjenesten; hvis tjenesten ikke er identifisert i aud-kravet, må tokenet avvises [S1].
  • Forhindre avspilling: Bruk kravet jti (JWT ID) for å tilordne en unik identifikator til hvert token, slik at serveren kan spore og avvise gjenbrukte tokens [S1].

Deteksjonsstrategi

Sårbarheter i JWT-håndtering kan identifiseres ved å analysere tokenstrukturen og serverresponsatferden:

  • Inspeksjon av topptekst: Kontrollerer alg (algoritme) overskriften for å sikre at den ikke er satt til "ingen" og bruker forventede kryptografiske standarder [S1].
  • Kravbekreftelse: Bekreftelse av tilstedeværelsen og gyldigheten av kravene til exp (utløp) og aud (publikum) innenfor JSON-nyttelasten [S1].
  • Valideringstesting: Tester om serveren korrekt avviser tokens som har utløpt i henhold til exp-kravet eller er ment for en annen målgruppe som definert av aud-kravet [S1].