FixVibe
Covered by FixVibehigh

JWT Қауіпсіздік: қамтамасыз етілмеген таңбалауыштардың тәуекелдері және шағымды тексерудің жоқтығы

JSON Web Tokens (JWTs) шағымдарды тасымалдауға арналған стандартты қамтамасыз етеді, бірақ қауіпсіздік қатаң тексеруге сүйенеді. Қолтаңбаларды, жарамдылық мерзімін немесе жоспарланған аудиторияны растамау шабуылдаушыларға аутентификацияны айналып өтуге немесе белгілерді қайта ойнатуға мүмкіндік береді.

CWE-347CWE-287CWE-613

Шабуылшының әсері

Дұрыс емес JWT валидациясы шабуылдаушыларға жалған шағымдар жасау немесе мерзімі өткен [S1] таңбалауыштарын қайта пайдалану арқылы аутентификация механизмдерін айналып өтуге мүмкіндік береді. Сервер жарамды қолтаңбасыз таңбалауыштарды қабылдаса, шабуылдаушы артықшылықтарды арттыру үшін пайдалы жүктемені өзгерте алады немесе [S1] кез келген пайдаланушының кейпін көрсете алады. Сонымен қатар, жарамдылық мерзімін (exp) орындамау шабуылдаушыға бұзылған таңбалауышты [S1] шексіз пайдалануға мүмкіндік береді.

Негізгі себеп

JSON веб-таңбалауышы (JWT) – сандық қолтаңбасы бар немесе тұтастығы қорғалған [S1] шағымдарды көрсету үшін пайдаланылатын JSON негізіндегі құрылым. Қауіпсіздік қателері әдетте екі негізгі іске асыру олқылығынан туындайды:

  • Қорғалмаған JWTs қабылдау: Егер қызмет қолтаңбаны тексеруді қатаң түрде орындамаса, ол қолтаңба жоқ және алгоритм "жоқ" [S1] күйіне орнатылған "Қорғалмаған JWT" өңдеуі мүмкін. Бұл сценарийде сервер [S1] тұтастығын тексермей пайдалы жүктемедегі шағымдарға сенеді.
  • Шағымды растау жоқ: exp (жарамдылық мерзімі) шағымы JWT [S1] өңдеуге қабылданбауы тиіс немесе одан кейін уақытты анықтайды. aud (аудитория) шағымы [S1] токенінің болжалды алушыларын анықтайды. Егер олар белгіленбесе, сервер мерзімі өтіп кеткен немесе басқа [S1] қолданбасына арналған таңбалауыштарды қабылдауы мүмкін.

Бетонды түзетулер

  • Криптографиялық қолтаңбаларды қолдану: қолданбаны алдын ала бекітілген, күшті қол қою алгоритмін (RS256 сияқты) пайдаланбайтын кез келген JWT қабылдамау үшін конфигурациялаңыз.
  • Жарамдылық мерзімін растау: ағымдағы күн мен уақыт exp [S1] шағымында көрсетілген уақыттан бұрын болуын тексеру үшін міндетті тексеруді орындаңыз.
  • Аудиторияны тексеру: aud шағымында жергілікті қызметті анықтайтын мән бар екеніне көз жеткізіңіз; егер қызмет aud шағымында анықталмаса, таңбалауыш [S1] қабылданбауы керек.
  • Қайталауды болдырмау: jti (JWT идентификаторы) шағымын серверге қайта пайдаланылған [S1] таңбалауыштарын қадағалауға және қабылдамау мүмкіндігін беретін әрбір таңбалауышқа бірегей идентификатор тағайындау үшін пайдаланыңыз.

Анықтау стратегиясы

JWT өңдеуіндегі осалдықтарды таңбалауыш құрылымы мен сервердің жауап әрекетін талдау арқылы анықтауға болады:

  • Тақырыпты тексеру: alg (алгоритм) тақырыбын тексеру, оның «ешқандай» күйіне орнатылмағанына және [S1] күтілетін криптографиялық стандарттарын пайдаланатынына көз жеткізу.
  • Шағымды тексеру: [S1] JSON пайдалы жүктемесінде exp (жарамдылық мерзімі) және aud (аудитория) шағымдарының болуын және жарамдылығын растау.
  • Тестілеуді тексеру: сервер exp шағымына сәйкес мерзімі өтіп кеткен немесе aud ZXCVFIXVIBETOKEN2ZXV шағымында анықталғандай басқа аудиторияға арналған таңбалауыштарды дұрыс қабылдамағанын тексеру.