FixVibe
Covered by FixVibehigh

Usalama wa JWT: Hatari za Tokeni Zisizolindwa na Uthibitishaji wa Madai Unaokosekana.

Tokeni za Wavuti za JSON (JWTs) hutoa kiwango cha kuhamisha madai, lakini usalama unategemea uthibitishaji mkali. Kukosa kuthibitisha saini, muda wa mwisho wa matumizi, au hadhira inayolengwa huruhusu washambuliaji kukwepa uthibitishaji au kucheza tena tokeni.

CWE-347CWE-287CWE-613

Athari za Mshambulizi

Uthibitishaji usiofaa wa JWT huruhusu wavamizi kukwepa mbinu za uthibitishaji kwa kughushi madai au kutumia tena tokeni zilizokwisha muda wake [S1]. Seva ikikubali tokeni bila saini halali, mshambulizi anaweza kurekebisha upakiaji ili kuongeza mapendeleo au kuiga mtumiaji yeyote [S1]. Zaidi ya hayo, kushindwa kutekeleza dai la kuisha kwa muda wa matumizi (exp) huruhusu mshambulizi kutumia tokeni iliyoathiriwa kwa muda usiojulikana [S1].

Chanzo Chanzo

Tokeni ya Wavuti ya JSON (JWT) ni muundo unaotegemea JSON unaotumiwa kuwakilisha madai ambayo yametiwa sahihi kidijitali au kulindwa kwa uadilifu [S1]. Kushindwa kwa usalama kwa kawaida kunatokana na mapungufu mawili ya msingi ya utekelezaji:

  • Kukubalika kwa JWT Zisizolindwa: Ikiwa huduma haitekelezi uthibitishaji wa sahihi kabisa, inaweza kuchakata "JWT zisizolindwa" ambapo saini haipo na algoriti imewekwa kuwa "hapana" [S1]. Katika hali hii, seva inaamini madai katika upakiaji bila kuthibitisha uadilifu wao [S1].
  • Uthibitishaji wa Dai unaokosekana: Dai la exp (muda wa kuisha) hubainisha muda ambao JWT lazima ukubaliwe kwa ajili ya kuchakata [S1] au baada yake. Dai la aud (hadhira) linabainisha walengwa wa kupokea tokeni [S1]. Ikiwa hizi hazijachaguliwa, seva inaweza kukubali tokeni ambazo muda wake umeisha au zilikusudiwa kwa programu tofauti [S1].

Marekebisho ya Zege

  • Tekeleza Sahihi za Cryptographic: Sanidi programu ili kukataa JWT yoyote ambayo haitumii algoriti iliyoidhinishwa awali, ya kutia sahihi (kama vile RS256).
  • Thibitisha Muda wa Kuisha: Tekeleza ukaguzi wa lazima ili kuhakikisha tarehe na saa ya sasa ni kabla ya muda uliobainishwa katika dai la exp [S1].
  • Thibitisha Hadhira: Hakikisha dai la aud lina thamani inayotambulisha huduma ya ndani; ikiwa huduma haijatambuliwa katika dai la aud, tokeni lazima ikataliwe [S1].
  • Zuia Uchezaji tena: Tumia dai la jti (JWT) ili kukabidhi kitambulisho cha kipekee kwa kila tokeni, ikiruhusu seva kufuatilia na kukataa tokeni zilizotumika tena [S1].

Mkakati wa Ugunduzi

Udhaifu katika kushughulikia JWT unaweza kutambuliwa kwa kuchanganua muundo wa tokeni na tabia ya majibu ya seva:

  • Ukaguzi wa Kichwa: Kukagua kichwa cha alg (algorithm) ili kuhakikisha kuwa hakijawekwa kuwa "hapana" na hutumia viwango vya kriptografia vinavyotarajiwa [S1].
  • Uthibitishaji wa Dai: Kuthibitisha kuwepo na uhalali wa madai ya exp (kuisha) na aud (hadhira) ndani ya malipo ya JSON [S1].
  • Jaribio la Uthibitishaji: Kujaribu ikiwa seva inakataa kwa usahihi tokeni ambazo muda wake umeisha kulingana na dai la exp au zinalenga hadhira tofauti kama ilivyobainishwa na dai la aud [S1].