بررسی Session Puzzling
در این بخش از دوره آموزشی OWASP-WSTG به ششمین بخش از استاندارد WSTG با شناسه WSTG-SESS-08 می پردازیم که مربوط به بررسی Session Puzzling می باشد.
خلاصه
Session Variable Overloading (که تحت عنوان Session Puzzling نیز شناخته میشود) یک آسیبپذیری سطح برنامه است که میتواند یک مهاجم را قادر به انجام انواع اقدامات مخرب، از جمله (اما نه محدود به) موارد زیر نماید:
• مکانیزمهای اجرای احراز هویت کارآمد را نادیده گرفته و کاربران قانونی را جعل نماید.
• امتیازات یک حساب کاربری مخرب را افزایش دهد، در محیطی که در غیر این صورت بی خطا تلقی می شود.
• پرش از مراحل مقدماتی در فرآیندهای چند مرحلهای، حتی اگر این فرآیند شامل تمام محدودیتهای معمول در سطح کد باشد.
• دستکاری مقادیر سمت سرور در روش های غیرمستقیم که قابل پیش بینی یا شناسایی نیستند.
• اجرای حملات سنتی در مکانهایی که قبلا غیرقابل دسترسی بودند یا حتی ایمن در نظر گرفته میشدند.
این آسیبپذیری زمانی رخ میدهد که یک برنامه از متغیر جلسه یکسان برای بیش از یک هدف استفاده کند. یک مهاجم میتواند به طور بالقوه به صفحات به ترتیبی که توسط توسعه دهندگان پیشبینی نشده است دسترسی داشته باشد به طوری که متغیر جلسه در یک زمینه (context) تنظیم شود و سپس در زمینه دیگر مورد استفاده قرار گیرد.
عنوان مثال، یک مهاجم میتواند از بارگذاری بیشازحد متغیر جلسه (Session Variable Overloading) برای دور زدن مکانیسمهای اجرایی احراز هویت برنامههایی که احراز هویت را با تأیید وجود متغیرهای جلسه حاوی مقادیر مرتبط با هویت، که معمولاً پس از یک فرآیند تأیید هویت موفقیتآمیز در جلسه ذخیره میشوند، استفاده کند.
این بدین معنی است که یک مهاجم ابتدا به یک مکان در برنامه کاربردی که زمینه جلسه را تنظیم میکند، دسترسی پیدا میکند و سپس به مکانهای ممتاز (Privileged Locations) که این زمینه را بررسی میکنند، دسترسی پیدا میکند.
به عنوان مثال، یک بردار حمله Authentication Bypass میتواند با دسترسی به یک نقطه ورود قابلدسترس عمومی (به عنوان مثال یک صفحه بازیابی رمز عبور) اجرا شود که جلسه را با یک متغیر جلسه یکسان، بر مبنای مقادیر ثابت یا بر مبنای ورودی کاربر پر میکند.
اهداف تست
• همه متغیرهای جلسه را شناسایی کنید.
• جریان منطقی ایجاد جلسه را بشکنید.
چگونه تست را انجام دهیم
تست جعبه سیاه
این آسیبپذیری را میتوان با برشمردن تمام متغیرهای جلسه مورد استفاده توسط برنامه و در زمینهای که آنها معتبر هستند، شناسایی و مورد بهرهبرداری قرار داد.
این امر به ویژه با دسترسی به یک سری از نقاط ورودی و سپس بررسی نقاط خروج امکان پذیر است. در مورد تست جعبه سیاه این روش دشوار است و نیاز به کمی شانس دارد زیرا هر توالی متفاوت میتواند به نتیجه متفاوتی منجر شود.
نمونه
یک مثال بسیار ساده میتواند قابلیت تنظیم مجدد رمز عبور باشد که در نقطه ورود میتواند از کاربر درخواست کند تا برخی از اطلاعات شناسایی مانند نام کاربری یا آدرس ایمیل را ارائه دهد. سپس این صفحه میتواند جلسه را با این مقادیر شناسایی پر کند که مستقیما از طرف کلاینت دریافت میشوند، یا از پرسشها یا محاسبات براساس ورودی دریافتی به دست میآیند. در این مرحله ممکن است برخی صفحات در برنامه وجود داشته باشند که دادههای خصوصی را براساس این شی نشست نشان میدهند. به این ترتیب، مهاجم میتواند فرآیند احراز هویت را دور بزند.
تست جعبه خاکستری
موثرترین روش برای شناسایی این آسیبپذیریها از طریق بررسی سورس کد است.
Remediation
متغیرهای نشست تنها باید برای یک هدف ثابت استفاده شوند.