در حال بارگذاری...
بررسی آسیبپذیریهای ارتقای امتیاز (Privilege Escalation) شامل ارتقای عمودی و افقی در برنامههای وب.
اهداف این درس
ارتقای امتیاز (Privilege Escalation) آسیبپذیریای است که در آن مهاجم میتواند دسترسی فراتر از سطح مجاز خود داشته باشد. این آسیبپذیری به دو نوع اصلی تقسیم میشود: ارتقای عمودی (Vertical) و ارتقای افقی (Horizontal).
حملهای که در آن کاربر سطح پایین به سطح بالاتر دسترسی پیدا میکند. مثلاً کاربر عادی به پنل مدیریت دسترسی پیدا کند.
حملهای که در آن کاربر به منابع کاربران همسطح خود دسترسی پیدا میکند. مثلاً کاربر A به اطلاعات کاربر B دسترسی پیدا کند.
ارتقای امتیاز میتواند منجر به دسترسی غیرمجاز به اطلاعات حساس، تغییر یا حذف دادهها، اجرای عملیات مدیریتی، و کنترل کامل سیستم شود. طبق OWASP Top 10، نقض کنترل دسترسی یکی از رایجترین آسیبپذیریها است.
تمام نقشهای کاربری و مجوزهای هر نقش را شناسایی کنید. این کار با بررسی مستندات، کد منبع و تست دستی انجام میشود.
| عملیات | کاربر عادی | ویرایشگر | مدیر |
|---|---|---|---|
| مشاهده پروفایل خود | ✓ | ✓ | ✓ |
| ویرایش پروفایل خود | ✓ | ✓ | ✓ |
| مشاهده پروفایل دیگران | ✗ | ✓ | ✓ |
| حذف کاربر | ✗ | ✗ | ✓ |
| تغییر نقش کاربر | ✗ | ✗ | ✓ |
| دسترسی به پنل مدیریت | ✗ | ✗ | ✓ |
با حساب کاربر عادی، سعی کنید به منابع مدیر دسترسی پیدا کنید:
1# دسترسی مستقیم به URL مدیریت2curl "https://target.com/admin/dashboard" -H "Cookie: session=normal_user"34# تغییر نقش در فرم5curl -X POST "https://target.com/api/profile" \6 -H "Cookie: session=normal_user" \7 -d 'role=admin'89# تغییر نقش در JSON10curl -X PUT "https://target.com/api/user/123" \11 -H "Cookie: session=normal_user" \12 -H "Content-Type: application/json" \13 -d '{"role": "admin"}'1415# تست API endpoint مدیریت16curl "https://target.com/api/admin/users" -H "Cookie: session=normal_user"با حساب کاربر A، سعی کنید به منابع کاربر B دسترسی پیدا کنید:
1# تغیید ID کاربر در URL2curl "https://target.com/api/user/456" -H "Cookie: session=user_123"34# تغیید ID در پارامتر5curl "https://target.com/api/orders?user_id=456" -H "Cookie: session=user_123"67# تغیید ID در body8curl -X POST "https://target.com/api/transfer" \9 -H "Cookie: session=user_123" \10 -d 'from=123&to=456&amount=1000'1112# تست با UUID13curl "https://target.com/api/user/550e8400-e29b-41d4-a716-446655440000" \14 -H "Cookie: session=user_123"بررسی کنید آیا کاربر میتواند نقش خود یا دیگران را تغییر دهد:
| نقطه ضعف | توضیح | تأثیر |
|---|---|---|
| عدم بررسی مالکیت | فقط بررسی احراز هویت، نه مالکیت منبع | ارتقای افقی |
| فیلد role قابل تغییر | کاربر میتواند نقش خود را تغییر دهد | ارتقای عمودی |
| ID قابل پیشبینی | استفاده از ID متوالی | ارتقای افقی |
| عدم بررسی در API | بررسی مجوز فقط در UI | ارتقای عمودی |
| نقشهای سختکد شده | نقشها در کد سختکد شدهاند | مدیریت دشوار |
ارتقای امتیاز میتواند منجر به دسترسی غیرمجاز به اطلاعات حساس، تغییر یا حذف دادهها، اجرای عملیات مدیریتی، و کنترل کامل سیستم شود.
1# بررسی مجوز در decorator2def require_role(role):3 def decorator(view_func):4 def wrapper(request, *args, **kwargs):5 if not request.user.is_authenticated:6 return Response(status=401)7 if request.user.role != role:8 return Response(status=403)9 return view_func(request, *args, **kwargs)10 return wrapper11 return decorator1213# استفاده14@require_role('admin')15def delete_user(request, user_id):16 # فقط مدیر میتواند کاربر حذف کند17 user = get_object_or_404(User, id=user_id)18 user.delete()19 return Response(status=204)2021# بررسی مالکیت22def get_order(request, order_id):23 order = get_object_or_404(Order, id=order_id)24 if order.user != request.user and not request.user.is_admin:25 return Response(status=403)26 return Response(order.data)هشدار
هرگز به ورودی کلاینت برای تعیین نقش یا مجوز اعتماد نکنید. نقش و مجوز باید همیشه از پایگاه داده خوانده شود و در سمت سرور بررسی شود.
هر عملیات باید مجوز دسترسی کاربر را بررسی کند.
نقشها و مجوزها باید در سمت سرور مدیریت شوند.
تغییر نقش کاربر نباید از طریق ورودی کلاینت ممکن باشد.
تست ارتقای امتیاز باید با تمام نقشهای کاربری انجام شود.
کاربر عادی با تغییر پارامتر role=admin در فرم به پنل مدیریت دسترسی پیدا میکند. این کدام نوع ارتقای امتیاز است؟
ارتقای امتیاز عمودی و افقی چه تفاوتی دارند؟
ارتقای عمودی (Vertical) زمانی است که کاربر سطح پایین به سطح بالاتر دسترسی پیدا کند (مثل کاربر عادی → مدیر). ارتقای افقی (Horizontal) زمانی است که کاربر به منابع کاربران همسطح خود دسترسی پیدا کند (مثل کاربر A → کاربر B). هر دو خطرناک هستند اما ارتقای عمودی معمولاً تأثیر بیشتری دارد.
RBAC چیست و چرا مهم است؟
RBAC (Role-Based Access Control) سیستمی است که دسترسی کاربران بر اساس نقششان مدیریت میشود. مثلاً نقشهای کاربر عادی، ویرایشگر و مدیر هر کدام مجوزهای متفاوتی دارند. RBAC مهم است زیرا مدیریت دسترسی را سادهتر و امنتر میکند.
چگونه از ارتقای امتیاز جلوگیری کنیم؟
راههای جلوگیری شامل: بررسی مجوز در سمت سرور برای هر عملیات، استفاده از RBAC، عدم اعتماد به ورودی کلاینت، استفاده از UUID به جای ID متوالی، و تستهای خودکار امنیتی.