همانطور که در مقاله قبل به معرفی JSON Web Token (JWT) پرداخته شد. در این مقاله قصد داریم به یکی
از حملات و شرح آسیب پذیری موجود در توکن های JWT بپردازیم.
JWT برای محافظت در برابر دستکاری اطلاعات میتواند به صورت دیجیتالی امضا شود. زمانی الگوریتم JWT
بر روی none تنظیم میشود. به این معنا میباشد که این توکن امضا نشده است.
الگوریتم none یک قابلیت اضافی JWT میباشد. این الگوریتم در وضعیتی که یکپارچگی توکن قبلاً تایید شده
باشد، استفاده میشود. لازم به ذکر است این الگوریتم یکی از دو الگوریتمی می باشد که برای پیاده سازی
لازم است به آن توجه شود. (دیگری HS256)
متاسفانه، برخی از کتابخانه ها، توکن های امضا شده با الگوریتم none را به عنوان یک امضا معتبر تلقی
میکنند. (به عنوان مثال signature="")
در حال حاضر اکثر پیاده سازی ها، یک راه حل برای جلوگیری از این حمله دارند. یکی از مواردی که میتوان به
آن اشاره نمود اختصاص یک secret برای اعتبارسنجی توکن ها میباشد، در این صورت نمیتوان از الگوریتم
none استفاده نمود.
تغییر الگوریتم به مقدار none
هدر JWT به صورت زیر می باشد.
این داده ها با مکانیزم Base64 رمزگذاری شده و قبل از اولین dot ( . ) واقع شده است. پارامتر alg در اینجا
الگوریتم مورد استفاده برای امضای JWT را نشان میدهد. یکی از الگوریتم هایی که تمامی کتابخانه های
JWT بدون هیچ امضایی، میبایست پشتیبانی کنند، مقدار none میباشد. اگر ما مقدار none را برای
الگوریتم در نظر بگیریم، JWT بدون داشتن هیچگونه امضایی پذیرفته خواهد شد.
پیاده سازی حمله JWT none algorithm در محیط آزمایشی
در این سناریو، هکر با سوء استفاده از آسیب پذیری موجود در JWT، سطح دسترسی خود را از Guest به admin افزایش می دهد.
منابع
[0] www.jwt.io