Vpliv napadalca
Nepravilno preverjanje veljavnosti JWT omogoča napadalcem, da zaobidejo mehanizme za preverjanje pristnosti s ponarejanjem zahtevkov ali ponovno uporabo poteklih žetonov [S1]. Če strežnik sprejme žetone brez veljavnega podpisa, lahko napadalec spremeni tovor, da poveča privilegije ali se izda za katerega koli uporabnika [S1]. Poleg tega neuveljavljanje zahtevka za potek (exp) napadalcu omogoča neomejeno uporabo ogroženega žetona [S1].
Temeljni vzrok
Spletni žeton JSON (JWT) je struktura, ki temelji na JSON in se uporablja za predstavitev zahtevkov, ki so digitalno podpisani ali zaščiteni z integriteto [S1]. Varnostne napake običajno izvirajo iz dveh primarnih vrzeli pri izvajanju:
- Sprejemanje nezavarovanih JWT-jev: Če storitev ne uveljavlja strogo preverjanja podpisa, lahko obdela "nezaščitene JWT-je", kjer podpisa ni in je algoritem nastavljen na "brez" [S1]. V tem scenariju strežnik zaupa zahtevkom v obremenitvi, ne da bi preveril njihovo celovitost [S1].
- Manjkajoče preverjanje zahtevka: Zahtevek
exp(čas poteka veljavnosti) določa čas, ko ali po katerem JWT ne sme biti sprejet za obdelavo [S1]. Zahtevekaud(občinstvo) identificira predvidene prejemnike žetona [S1]. Če ti niso označeni, lahko strežnik sprejme žetone, ki so potekli ali so bili namenjeni drugi aplikaciji [S1].
Betonski popravki
- Uveljavi kriptografske podpise: Konfigurirajte aplikacijo tako, da zavrne vsak JWT, ki ne uporablja vnaprej odobrenega močnega algoritma za podpisovanje (kot je RS256).
- Potrdi potek: Izvedite obvezno preverjanje, da zagotovite, da sta trenutni datum in ura pred časom, določenim v zahtevku
exp[S1]. - Preveri občinstvo: Zagotovite, da zahtevek
audvsebuje vrednost, ki identificira lokalno storitev; če storitev ni identificirana v zahtevkuaud, je treba žeton zavrniti [S1]. - Prepreči ponovno predvajanje: Uporabite zahtevek
jti(JWT ID), da vsakemu žetonu dodelite edinstven identifikator, kar strežniku omogoči sledenje in zavrnitev ponovno uporabljenih žetonov [S1].
Strategija odkrivanja
Ranljivosti pri ravnanju z JWT je mogoče prepoznati z analizo strukture žetona in vedenja odziva strežnika:
- Pregled glave: Preverjanje glave
alg(algoritem), da se zagotovi, da ni nastavljena na "brez" in uporablja pričakovane kriptografske standarde [S1]. - Preverjanje zahtevka: potrjuje prisotnost in veljavnost zahtevkov
exp(potek) inaud(občinstvo) v nosilcu JSON [S1]. - Validacijsko testiranje: Preizkušanje, ali strežnik pravilno zavrača žetone, ki so potekli v skladu z zahtevkom
expali so namenjeni drugemu občinstvu, kot je opredeljeno v zahtevkuaud[S1].
