FixVibe
Covered by FixVibehigh

JWT Suojaus: suojaamattomien tokenien riskit ja vaatimuksen vahvistamisen puuttuminen

JSON-verkkotunnukset (JWT) tarjoavat standardin vaatimusten siirtämiselle, mutta turvallisuus perustuu tiukkaan validointiin. Jos allekirjoituksia, vanhenemisaikoja tai tarkoitettuja yleisöjä ei tarkisteta, hyökkääjät voivat ohittaa todennuksen tai toistaa tokeneja.

CWE-347CWE-287CWE-613

Hyökkääjän vaikutus

Virheellinen JWT-tarkistus antaa hyökkääjille mahdollisuuden ohittaa todennusmekanismit väärentämällä vaatimuksia tai käyttämällä vanhentuneita tunnuksia [S1]. Jos palvelin hyväksyy tunnuksia ilman kelvollista allekirjoitusta, hyökkääjä voi muokata hyötykuormaa laajentaakseen oikeuksia tai esiintyä kenenä tahansa käyttäjänä [S1]. Lisäksi, jos vanhenemisvaatimusta (exp) ei panna täytäntöön, hyökkääjä voi käyttää vaarantunutta tunnusta loputtomasti [S1].

Perussyy

JSON Web Token (JWT) on JSON-pohjainen rakenne, jota käytetään edustamaan vaatimuksia, jotka on digitaalisesti allekirjoitettu tai eheyssuojattu [S1]. Suojausvirheet johtuvat tyypillisesti kahdesta ensisijaisesta toteutuspuutosta:

  • Suojaamattomien JWT:iden hyväksyminen: Jos palvelu ei tiukasti pakota allekirjoituksen vahvistusta, se voi käsitellä "suojaamattomia JWT:itä", jos allekirjoitus puuttuu ja algoritmin arvoksi on asetettu "ei mitään" [S1]. Tässä skenaariossa palvelin luottaa hyötykuorman väitteisiin varmistamatta niiden eheyttä [S1].
  • Puuttuva vaatimuksen validointi: exp (vanhentumisaika) -vaatimus määrittää ajan, jonka jälkeen tai jonka jälkeen hakemusta JWT ei saa hyväksyä [S1]:n käsittelyyn. aud (yleisö) -vaatimus identifioi tunnuksen [S1] aiotut vastaanottajat. Jos näitä ei ole valittu, palvelin voi hyväksyä tokeneja, jotka ovat vanhentuneet tai jotka on tarkoitettu toiselle sovellukselle [S1].

Betonikorjauksia

  • Pakota kryptografiset allekirjoitukset: Määritä sovellus hylkäämään kaikki JWT, jotka eivät käytä ennalta hyväksyttyä vahvaa allekirjoitusalgoritmia (kuten RS256).
  • Vahvista vanheneminen: Suorita pakollinen tarkistus varmistaaksesi, että nykyinen päivämäärä ja aika ovat ennen kuin exp-vaatimuksessa [S1] määritettyä aikaa.
  • Tarkista yleisö: Varmista, että aud-vaatimus sisältää paikallisen palvelun yksilöivän arvon; jos palvelua ei tunnisteta vaatimuksessa aud, tunnus on hylättävä [S1].
  • Estä toisto: Käytä jti (JWT ID) -vaatimusta määrittääksesi kullekin tunnukselle yksilöllisen tunnisteen, jolloin palvelin voi seurata ja hylätä uudelleenkäytettyjä merkkejä [S1].

Havaitsemisstrategia

JWT-käsittelyn haavoittuvuudet voidaan tunnistaa analysoimalla tunnuksen rakennetta ja palvelimen vastauskäyttäytymistä:

  • Otsikon tarkastus: alg (algoritmi) -otsikon tarkistaminen sen varmistamiseksi, että sen arvoksi ei ole asetettu "ei mitään" ja se käyttää odotettuja salausstandardeja [S1].
  • Vaatimuksen vahvistus: exp (vanheneminen) ja aud (yleisö) -vaatimusten olemassaolon ja pätevyyden vahvistaminen JSON-hyötykuormassa [S1].
  • Validointitestaus: Testaa, hylkääkö palvelin oikein tunnukset, jotka ovat vanhentuneet vaatimuksen exp mukaisesti tai jotka on tarkoitettu eri yleisölle aud-vaatimuksen [S1] määrittelemällä tavalla.