FixVibe
Covered by FixVibehigh

Varnost JWT: Tveganja nezavarovanih žetonov in manjkajočega preverjanja zahtevkov

Spletni žetoni JSON (JWT) zagotavljajo standard za prenos zahtevkov, vendar je varnost odvisna od strogega preverjanja. Neuspešno preverjanje podpisov, časov poteka ali predvidenih ciljnih skupin omogoča napadalcem, da obidejo avtentikacijo ali ponovno predvajajo žetone.

CWE-347CWE-287CWE-613

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]. Zahtevek aud (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 aud vsebuje vrednost, ki identificira lokalno storitev; če storitev ni identificirana v zahtevku aud, 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) in aud (občinstvo) v nosilcu JSON [S1].
  • Validacijsko testiranje: Preizkušanje, ali strežnik pravilno zavrača žetone, ki so potekli v skladu z zahtevkom exp ali so namenjeni drugemu občinstvu, kot je opredeljeno v zahtevku aud [S1].