Užpuoliko poveikis
Netinkamas JWT patvirtinimas leidžia užpuolikams apeiti autentifikavimo mechanizmus suklastojus pretenzijas arba pakartotinai naudojant pasibaigusio galiojimo prieigos raktus [S1]. Jei serveris priima prieigos raktus be galiojančio parašo, užpuolikas gali modifikuoti naudingą apkrovą, kad padidintų privilegijas arba apsimesti bet kuriuo vartotoju [S1]. Be to, nepavykus įvykdyti reikalavimo dėl galiojimo pabaigos (exp), užpuolikas gali neribotą laiką naudoti pažeistą prieigos raktą [S1].
Pagrindinė priežastis
JSON žiniatinklio prieigos raktas (JWT) yra JSON pagrindu sukurta struktūra, naudojama skaitmeniniu parašu arba vientisumu apsaugotoms pretenzijoms pateikti [S1]. Saugos gedimai paprastai kyla dėl dviejų pagrindinių diegimo spragų:
- Neapsaugotų JWT priėmimas: jei paslauga griežtai netaiko parašo tikrinimo, ji gali apdoroti „neapsaugotus JWT“, kai parašo nėra, o algoritmas nustatytas į „nėra“ [S1]. Pagal šį scenarijų serveris pasitiki naudingos apkrovos pretenzijomis, nepatikrindamas jų vientisumo [S1].
- Trūksta pretenzijos patvirtinimo: paraiškoje
exp(galiojimo laikas) nurodomas laikas, kuriam pasibaigus, JWT negali būti priimtas apdoroti [S1].aud(auditorijos) paraiškoje nurodomi numatomi prieigos rakto [S1] gavėjai. Jei jie nepažymėti, serveris gali priimti žetonus, kurių galiojimo laikas pasibaigęs arba kurie buvo skirti kitai programai [S1].
Betoniniai pataisymai
- Įgyvendinti kriptografinius parašus: sukonfigūruokite programą, kad ji atmestų bet kokį JWT, kuris nenaudoja iš anksto patvirtinto tvirto pasirašymo algoritmo (pvz., RS256).
- Patvirtinti galiojimo pabaigą: atlikite privalomą patikrinimą, kad įsitikintumėte, jog dabartinė data ir laikas yra ankstesni nei
expparaiškoje [S1] nurodytas laikas. - Patikrinti auditoriją: įsitikinkite, kad paraiškoje
audyra reikšmė, identifikuojanti vietinę paslaugą; jei paslauga nenurodyta pretenzijojeaud, žetonas turi būti atmestas [S1]. - Užkirsti kelią atkūrimui: naudokite paraišką
jti(JWT ID), kad kiekvienam prieigos raktui priskirtumėte unikalų identifikatorių, leidžiantį serveriui sekti ir atmesti pakartotinai naudojamus prieigos raktus [S1].
Aptikimo strategija
JWT tvarkymo spragas galima nustatyti išanalizavus prieigos rakto struktūrą ir serverio atsako elgesį:
- Antraštės patikrinimas: tikrinama
alg(algoritmo) antraštė, kad įsitikintumėte, jog ji nenustatyta į „nėra“ ir naudoja numatytus kriptografinius standartus [S1]. - Paraiškos patvirtinimas: patvirtinama, kad
exp(galiojimo laikas) iraud(auditorijos) paraiškos yra JSON naudingojoje apkrovoje [S1]. - Patvirtinimo testavimas: tikrinama, ar serveris teisingai atmeta prieigos raktus, kurių galiojimo laikas pasibaigęs pagal paraišką
exparba yra skirtas kitai auditorijai, kaip apibrėžtaaudparaiškoje [S1].
