FixVibe
Covered by FixVibehigh

JWT Անվտանգություն. չապահովված նշանների ռիսկեր և բացակայող պահանջի վավերացում

JSON Web Tokens-ը (JWT) ապահովում է պահանջների փոխանցման ստանդարտ, սակայն անվտանգությունը հիմնված է խիստ վավերացման վրա: Ստորագրությունները, ժամկետի ավարտի ժամկետները կամ նախատեսված լսարանները չստուգելը թույլ է տալիս հարձակվողներին շրջանցել նույնականացումը կամ վերարտադրել նշանները:

CWE-347CWE-287CWE-613

Հարձակվողի ազդեցությունը

JWT-ի սխալ վավերացումը թույլ է տալիս հարձակվողներին շրջանցել նույնականացման մեխանիզմները՝ կեղծելով պահանջները կամ վերօգտագործելով ժամկետանց ժետոններ [S1]: Եթե ​​սերվերն ընդունում է նշաններ առանց վավեր ստորագրության, հարձակվողը կարող է փոփոխել օգտակար բեռը՝ արտոնությունները մեծացնելու կամ [S1] ցանկացած օգտվողի նմանակման համար: Ավելին, ժամկետանց (exp) պահանջի չկիրառումը թույլ է տալիս հարձակվողին անորոշ ժամանակով օգտագործել վնասված նշանը [S1]:

Արմատային պատճառ

JSON Web Token-ը (JWT) JSON-ի վրա հիմնված կառույց է, որն օգտագործվում է թվային ստորագրությամբ կամ ամբողջականության պաշտպանված [S1] պահանջները ներկայացնելու համար: Անվտանգության ձախողումները սովորաբար բխում են իրականացման երկու հիմնական բացերից.

  • Անապահով JWT-ների ընդունում. Եթե ծառայությունը խստորեն չի պարտադրում ստորագրության ստուգումը, այն կարող է մշակել «Անապահով JWT-ներ», որտեղ ստորագրությունը բացակայում է, իսկ ալգորիթմը սահմանված է [S1]-ի «ոչինչ»: Այս սցենարում սերվերը վստահում է ծանրաբեռնվածության պահանջներին՝ առանց ստուգելու դրանց ամբողջականությունը [S1]:
  • Բացակայող հայցի վավերացում. exp (ժամկետի ժամկետը) հայցը սահմանում է այն ժամանակը, երբ JWT-ն չպետք է ընդունվի [S1] մշակման համար: aud (լսարանի) հայցը նույնականացնում է [S1] նշանի նախատեսված ստացողներին: Եթե ​​դրանք ստուգված չեն, սերվերը կարող է ընդունել նշաններ, որոնք ժամկետանց են կամ նախատեսված են այլ [S1] հավելվածի համար:

Բետոնե ամրացումներ

  • Կիրառել գաղտնագրային ստորագրությունները. կարգավորեք հավելվածը այնպես, որ մերժի ցանկացած JWT, որը չի օգտագործում նախապես հաստատված, ուժեղ ստորագրման ալգորիթմ (օրինակ՝ RS256):
  • Վավերացնել գործողության ժամկետը. Կատարեք պարտադիր ստուգում համոզվելու համար, որ ընթացիկ ամսաթիվը և ժամը exp` պահանջի մեջ նշված ժամանակից առաջ են:
  • Ստուգեք լսարանը. Համոզվեք, որ aud հայցը պարունակում է տեղական ծառայությունը նույնացնող արժեք. եթե ծառայությունը նշված չէ aud հայցում, ապա նշանը պետք է մերժվի [S1]:
  • Կանխել վերարտադրումը. Օգտագործեք jti (JWT ID) հայցը` յուրաքանչյուր նշանին եզակի նույնացուցիչ հատկացնելու համար, որը թույլ է տալիս սերվերին հետևել և մերժել վերօգտագործված նշանները [S1]:

Հայտնաբերման ռազմավարություն

JWT մշակման խոցելիությունները կարելի է բացահայտել՝ վերլուծելով նշանի կառուցվածքը և սերվերի արձագանքման վարքագիծը.

  • Header Inspection. alg (ալգորիթմ) վերնագրի ստուգում` համոզվելու համար, որ այն սահմանված չէ «ոչ մեկը» և օգտագործում է [S1] ակնկալվող ծածկագրային ստանդարտները:
  • Բողոքի ստուգում. հաստատում է exp (ժամկետանց) և aud (լսարան) պահանջների առկայությունը և վավերականությունը JSON օգտակար բեռնվածքում [S1]:
  • Վավերացման փորձարկում. Ստուգում, եթե սերվերը ճիշտ է մերժում այն նշանները, որոնք ժամկետանց են՝ համաձայն exp պահանջի կամ նախատեսված են այլ լսարանի համար, ինչպես սահմանված է aud պահանջով [S1]: