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 vaatimuksessaaud, 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) jaaud(yleisö) -vaatimusten olemassaolon ja pätevyyden vahvistaminen JSON-hyötykuormassa [S1]. - Validointitestaus: Testaa, hylkääkö palvelin oikein tunnukset, jotka ovat vanhentuneet vaatimuksen
expmukaisesti tai jotka on tarkoitettu eri yleisölleaud-vaatimuksen [S1] määrittelemällä tavalla.
