آسیب‌پذیری Broken Access Control و Stored XSS

در این Write up، تست نفوذگر آسیب‌پذیری‌های مختلفی را در برنامه شناسایی می‌کند که در انتها به آسیب‌پذیری Stored XSS می‌رسد.

برنامه‌ای که تست نفوذگر اقدام به بررسی آن نموده است برای مسدود سازی خدمات یک دستگاه به ‌سرقت ‌رفته از یک منطقه خاص می‌باشد. بنابراین اگر مدرکی مانند شکایات پلیس، شماره IMEI و برخی جزئیات در مورد مکانی که دستگاه به سرقت رفته یا مفقود شده ‌است داشته باشیم، آنگاه می‌توانیم یک گزارش در برنامه ایجاد نموده و دستگاه خود را مسدود کنیم تا زمانی که آن را پیدا نماییم و به طور مشابه، اگر تلفن خود را پیدا کنیم می‌توانیم به سادگی درخواست نماییم تا عملیات آزادسازی دستگاه انجام شود.

در ابتدا تست نفوذگر به دنبال آسیب‌پذیری Broken Access Control می‌گردد. وی برای تایید آسیب‌پذیری Broken Access Control، باید نقشی را اصلاح کند که امکان آن برای اکانت ادمین با سطح دسترسی پایین وجود نداشته باشد و اگر بتواند آن را اصلاح کند، آسیب‌پذیری وجود خواهد داشت.

استفاده از آسیب‌پذیری Self XSS برای Account Takeover

برای این منظور تست نفوذگر یک اکانت ادمین با سطح دسترسی بالا و یک اکانت ادمین با دسترسی پایین را مورد بررسی قرار می‌دهد. وی پس از بررسی متوجه می‌شود که صفحه‌ای وجود دارد که در آن یک مدیر می‌تواند سطح دسترسی را با توجه به محدودیت‌های خود تعیین کند.

تست نفوذگر یک درخواست را بررسی می‌کند تا ببیند چه اتفاقی در حال رخ دادن است و متوجه می‌شود که این درخواست از UserID برای اصلاح کاربران در صفحه مدیریت دسترسی استفاده می‌نماید.

تست نفوذگر UserID مربوط به یک اکانت با دسترسی بالا را دریافت نموده (‏وی این کار را با استفاده از ارسال درخواست توسط Burp Suite به دست آورده است) و سعی می‌نماید آن را با استفاده از دستکاری در پارامتر UserID در اکانت با دسترسی پایین تغییر دهد.

بدین وسیله تست نفوذگر توانست سطح دسترسی یک اکانت را تنظیم نماید که این کار تنها توسط اکانت با سطح دسترسی بالا امکان پذیر بود. البته این آسیب‌پذیری در بخش‌های دیگر برنامه نیز توسط وی شناسایی گردید.

این آسیب‌پذیری در واقع یک Insecure Direct Object Reference یا همان IDOR می‌باشد. پس از آن، تست نفوذگر به بررسی ویژگی‌های دیگر ادامه می‌دهد و مشاهده می‌کند که قادر به تغییر جزئیات مربوط به کاربر در صفحه کاربری نیز می‌باشد.

به روز رسانی مشخصات کاربر مانند نام، mail، تلفن و غیره ‏در پاسخ به صورت زیر منعکس می‌گردد:

همانطور که در تصویر بالا قابل مشاهده می‌باشد، جزئیات کاربر بدون هیچ Encoding و Sanitization در پاسخ انعکاس داده می‌شود.

نکته جالب این جا بود که با توجه به عدم Encoding، تست نفوذگر قادر به Escape نمودن هر دو فیلد و اجرا کد اسکریپت خود نبود.

اما، پارامتر name آسیب‌پذیر بوده و وی توانست با موفقیت آن را Escape نماید:

تست نفوذگر سعی می‌کند تا پیلود XSS را اضافه نموده و بازتاب آن را در پاسخ مشاهده کند که این پیلود اجرا نمی‌گردد.
در ادامه وی با بررسی و درک پاسخ ارائه شده یک پیلود جدید ایجاد می‌نماید:

بدین صورت، پیلود XSS نهایی، در برنامه ذخیره شده و با مراجعه به پروفایل کاربر و مشاهده آن، اجرا می‌گردد.
نکته: همواره سعی کنید که به جای استفاده از چندین پیلود به وسیله Intruder از Escaping استفاده نمایید.

منبع:

www.cysek.org/post/bac-sxss

درباره نویسنده: احسان نیک آور

ممکن است دوست داشته باشید