FixVibe
Covered by FixVibehigh

امنیت JWT: خطرات توکن‌های ناامن و اعتبارسنجی ادعای گمشده

JSON Web Tokens (JWTs) استانداردی برای انتقال ادعاها ارائه می‌کند، اما امنیت به اعتبارسنجی دقیق متکی است. عدم تأیید امضاها، زمان‌های انقضا یا مخاطبان مورد نظر به مهاجمان اجازه می‌دهد تا از احراز هویت یا پخش مجدد توکن‌ها عبور کنند.

CWE-347CWE-287CWE-613

تاثیر مهاجم

اعتبار سنجی نامناسب JWT به مهاجمان اجازه می دهد تا مکانیسم های احراز هویت را با جعل ادعاها یا استفاده مجدد از توکن های منقضی شده [S1] دور بزنند. اگر سروری توکن‌هایی را بدون امضای معتبر بپذیرد، مهاجم می‌تواند بارگذاری را برای افزایش امتیازات یا جعل هویت هر کاربر [S1] تغییر دهد. علاوه بر این، عدم اجرای ادعای انقضا (exp) به مهاجم اجازه می دهد تا از یک رمز در معرض خطر به طور نامحدود [S1] استفاده کند.

علت اصلی

یک توکن وب JSON (JWT) یک ساختار مبتنی بر JSON است که برای نشان دادن ادعاهایی که به صورت دیجیتال امضا شده اند یا از یکپارچگی محافظت شده اند [S1] استفاده می شود. خرابی های امنیتی معمولاً از دو شکاف اجرایی اصلی ناشی می شوند:

  • پذیرش JWTهای ناامن: اگر سرویسی به شدت تأیید امضا را اجرا نکند، ممکن است "JWTهای غیر ایمن" را در جایی که امضا وجود ندارد و الگوریتم روی "هیچ" [S1] تنظیم شده است پردازش کند. در این سناریو، سرور به ادعاهای موجود در محموله بدون تأیید صحت آنها [S1] اعتماد می کند.
  • تأیید ادعای گمشده: ادعای exp (زمان انقضا) زمانی را مشخص می کند که JWT نباید برای پردازش [S1] پذیرفته شود. ادعای aud (مخاطب) گیرندگان مورد نظر رمز [S1] را شناسایی می کند. اگر این موارد بررسی نشود، سرور ممکن است نشانه هایی را بپذیرد که منقضی شده اند یا برای برنامه دیگری [S1] در نظر گرفته شده اند.

رفع بتنی

  • اجرای امضاهای رمزنگاری : برنامه را طوری پیکربندی کنید که هر JWT را که از الگوریتم امضای از پیش تأیید شده و قوی (مانند RS256) استفاده نمی کند، رد کند.
  • اعتبار انقضا : یک بررسی اجباری برای اطمینان از اینکه تاریخ و زمان فعلی قبل از زمان مشخص شده در ادعای exp [S1] است، اجرا کنید.
  • تأیید مخاطب : اطمینان حاصل کنید که ادعای aud حاوی مقداری است که سرویس محلی را شناسایی می کند. اگر سرویس در ادعای aud شناسایی نشده باشد، رمز باید [S1] رد شود.
  • جلوگیری از پخش مجدد: از ادعای jti (شناسه JWT) برای اختصاص یک شناسه منحصر به فرد به هر توکن استفاده کنید و به سرور اجازه می دهد تا توکن های استفاده مجدد [S1] را ردیابی و رد کند.

استراتژی تشخیص

آسیب پذیری های موجود در مدیریت JWT را می توان با تجزیه و تحلیل ساختار توکن و رفتار پاسخ سرور شناسایی کرد:

  • بازرسی سرصفحه: بررسی سرصفحه alg (الگوریتم) برای اطمینان از اینکه روی "هیچ" تنظیم نشده است و از استانداردهای رمزنگاری مورد انتظار [S1] استفاده می کند.
  • تأیید ادعا: تأیید وجود و اعتبار ادعاهای exp (انقضا) و aud (مخاطب) در محموله JSON [S1].
  • تست اعتبارسنجی: آزمایش اینکه آیا سرور به درستی توکن هایی را رد می کند که مطابق ادعای exp منقضی شده اند یا برای مخاطبان دیگری مطابق با ادعای aud تعریف شده است.