FixVibe
Covered by FixVibehigh

JWT უსაფრთხოება: დაუცველი ტოკენების რისკები და გამოტოვებული პრეტენზიის ვალიდაცია

JSON Web Tokens (JWT) უზრუნველყოფს პრეტენზიების გადაცემის სტანდარტს, მაგრამ უსაფრთხოება ეყრდნობა მკაცრ ვალიდაციას. ხელმოწერების, ვადის გასვლის დროის ან განზრახ აუდიტორიის ვერ გადამოწმება თავდამსხმელებს საშუალებას აძლევს გვერდის ავლით ავთენტიფიკაცია ან ხელახლა დაკვრა ტოკენები.

CWE-347CWE-287CWE-613

თავდამსხმელის გავლენა

არასწორი JWT ვალიდაცია საშუალებას აძლევს თავდამსხმელებს გვერდის ავლით ავთენტიფიკაციის მექანიზმები პრეტენზიების გაყალბებით ან ვადაგასული ჟეტონების ხელახლა გამოყენებით [S1]. თუ სერვერი იღებს ტოკენებს მოქმედი ხელმოწერის გარეშე, თავდამსხმელს შეუძლია შეცვალოს დატვირთვა, რათა გაზარდოს პრივილეგიები ან მოიცვას ნებისმიერი მომხმარებელი [S1]. გარდა ამისა, ვადის გასვლის (exp) პრეტენზია თავდამსხმელს საშუალებას აძლევს გამოიყენოს გატეხილი ჟეტონი განუსაზღვრელი ვადით.

ძირეული მიზეზი

JSON ვებ ტოკენი (JWT) არის JSON-ზე დაფუძნებული სტრუქტურა, რომელიც გამოიყენება ციფრულად ხელმოწერილი ან მთლიანობის დაცული პრეტენზიების წარმოსაჩენად [S1]. უსაფრთხოების წარუმატებლობა, როგორც წესი, გამოწვეულია განხორციელების ორი ძირითადი ხარვეზიდან:

  • დაუცველი JWT-ების მიღება: თუ სერვისი მკაცრად არ ახორციელებს ხელმოწერის დადასტურებას, მას შეუძლია დაამუშავოს „დაუცველი JWT-ები“, სადაც ხელმოწერა არ არის და ალგორითმი დაყენებულია „არცერთზე“ [S1]. ამ სცენარში, სერვერი ენდობა პრეტენზიებს მომხმარებელზე, მათი მთლიანობის დადასტურების გარეშე [S1].
  • გამოტოვებული პრეტენზიის დადასტურება: exp (მოქმედების ვადის გასვლის დრო) განსაზღვრავს დროს ან მის შემდეგ JWT არ უნდა იქნას მიღებული [S1] დასამუშავებლად. aud (აუდიტორიის) პრეტენზია განსაზღვრავს [S1] ნიშნის სავარაუდო მიმღებებს. თუ ეს არ არის მონიშნული, სერვერს შეუძლია მიიღოს ჟეტონები, რომლებსაც ვადა გაუვიდა ან იყო განკუთვნილი სხვა [S1] აპლიკაციისთვის.

ბეტონის შესწორებები

  • აღასრულეთ კრიპტოგრაფიული ხელმოწერები: დააკონფიგურირეთ აპლიკაცია ისე, რომ უარყოს ნებისმიერი JWT, რომელიც არ იყენებს წინასწარ დამტკიცებულ, ძლიერ ხელმოწერის ალგორითმს (როგორიცაა RS256).
  • გადასვლის ვალიდაცია: განახორციელეთ სავალდებულო შემოწმება, რათა დარწმუნდეთ, რომ მიმდინარე თარიღი და დრო არის exp მოთხოვნაში მითითებულ დროზე ადრე [S1].
  • დაამოწმეთ აუდიტორია: დარწმუნდით, რომ aud პრეტენზია შეიცავს ლოკალური სერვისის იდენტიფიკაციის მნიშვნელობას; თუ სერვისი არ არის იდენტიფიცირებული aud საჩივარში, ჟეტონი უარყოფილი უნდა იყოს [S1].
  • გამეორების თავიდან აცილება: გამოიყენეთ jti (JWT ID) პრეტენზია თითოეული ტოკენისთვის უნიკალური იდენტიფიკატორის მინიჭებისთვის, რაც საშუალებას აძლევს სერვერს თვალყური ადევნოს და უარყოს ხელახლა გამოყენებული ტოკენები [S1].

გამოვლენის სტრატეგია

დაუცველობა JWT მართვაში შეიძლება გამოვლინდეს ტოკენის სტრუქტურისა და სერვერის პასუხის ქცევის ანალიზით:

  • Header Inspection: შეამოწმეთ alg (ალგორითმი) სათაური, რათა დარწმუნდეთ, რომ ის არ არის დაყენებული „არცერთი“ და იყენებს მოსალოდნელ კრიპტოგრაფიულ სტანდარტებს [S1].
  • საჩივრის დადასტურება: exp (ვადის გასვლის) და aud (აუდიტორიის) პრეტენზიების არსებობისა და მოქმედების დადასტურება JSON დატვირთვის [S1]-ში.
  • ვალიდაციის ტესტირება: ტესტირება, თუ სერვერი სწორად უარყოფს ტოკენებს, რომლებსაც ვადა გაუვიდა exp პრეტენზიის მიხედვით ან განკუთვნილია სხვა აუდიტორიისთვის, როგორც ეს განსაზღვრულია aud პრეტენზიით [S1].